630 likes | 902 Views
第二章 I/O 端口地址译码技术. 2.1 I/O 端口及其编址方式 2.2 I/O 端口地址分配 2.3 I/O 端口地址译码. 2.1 I/O 端口及其操作. I/O 端口和 I/O 操作 端口地址编址方式 独立编址方式的端口访问. I/O 端口和 I/O 操作. 1. 端口的概念:把 I/O 接口电路中能被 CPU 直接访问的寄存器或某些特定的器件称之为端口 (Port) 2.I/O 端口的一般特性: I/O 端口是 CPU 与 I/O 设备直接通信的地址 CPU 可以通过这些端口发送命令、读取状态和传送数据 一个接口通常含有几个端口. I/O 接口.
E N D
第二章 I/O端口地址译码技术 2.1 I/O端口及其编址方式 2.2 I/O端口地址分配 2.3 I/O端口地址译码
2.1 I/O端口及其操作 • I/O端口和I/O操作 • 端口地址编址方式 • 独立编址方式的端口访问
I/O端口和I/O操作 1.端口的概念:把I/O接口电路中能被CPU直接访问的寄存器或某些特定的器件称之为端口(Port) 2.I/O端口的一般特性: • I/O端口是CPU与I/O设备直接通信的地址 • CPU可以通过这些端口发送命令、读取状态和传送数据 • 一个接口通常含有几个端口
I/O接口 数据信息 DB 数据口 外 设 AB 状态信息 CPU 状态口 CB 控制信息 控制口
数据端口:完成CPU与外设数据信息传送 数据信息有数字量、开关量、模拟量 • 状态口:表示外设当前所处的状态,READY准备就绪位 BUSY 忙碌位 表示外设空闲,还是工作 ERROR 错误位 传送过程是否发生错误 • 控制端口:CPU用于控制I/O接口工作方式和 I/O设备启动
端口地址编址方式 • 统一编址(存储器映象编址) • 独立编址(I/O单独编址方式)
1、统一编址 AB I/O端口 DB CPU M或I/O接口 MEMR MEMW 控制逻辑 CB 1M存储单元
统一编址特点: M或I/O共用一个地址空间 对M和I/O的读写操作均MEMR和MEMW • 统一编址优点: 不需要设置专用的I/O指令 I/O空间是存储器的一部分,可大可小 • 统一编址缺点: 内存空间减少 访问I/O时指令长,地址长,访问时间增加
2、独立编址 内存空间 DB AB CPU I/O M I/O空间 IOR IOW MER MEW 控制逻辑 1M 64K
独立编址特点: M和I/O端口用两个独立的地址空间 用MER和MEW对存储器读写,用IOR和IOW对I/O读写 • 独立编址优点: I/O端口地址译码简单,M和I/O操作指令不同 I/O端口不占用M的地址 • 独立编址缺点: 设置专用的I/O指令,因指令较简单,程序设计 灵活性较差
独立编址方式的端口访问 1.汇编语言中的I/O语句 IN 累加器, {端口地址|DX} OUT {端口地址|DX},累加器 其中累加器可以是AL或AX。当累加器是AL时,端口是8位数据传送;当累加器是AX时,端口是16位数据传送。 {端口地址|DX}中的符号“|”表示前后两者之间只能选其一。
寻址方式有两种:(1)直接寻址:指令中直接访问端口地址,只能表示0~255范围内的端口。(2)间接寻址:指令中的端口地址放于DX中,通过DX访问端口。可以访问端口地址大于255的端口寻址方式有两种:(1)直接寻址:指令中直接访问端口地址,只能表示0~255范围内的端口。(2)间接寻址:指令中的端口地址放于DX中,通过DX访问端口。可以访问端口地址大于255的端口 例:从300H端口读入一个字节或一个字,在发给20H端口的指令为: MOV DX,300H IN AL,DX IN AX,DX OUT 20H,AL OUT 20H,AX
2.C语言中的端口读写函数 在PC系列微机上运行的几种C语言版本,都支持端口的输入输出操作,C语言中有专门的访问端口的库函数。这些库函数实际上是调用了汇编的IN/OUT指令 常用到的Turbo C函数如下: (1) inportb() (2) outportb() (3) clrscr() (4) getch() (5) kbhit() (6) delay() (7) sound()
例 利用inportb()函数从所指定的输入端口2F0H读取一个字节的数据,并显示在屏幕上。 intportb()的原型为: inportb(int port),头文件为dos.h。 main() { unsigned char c; c=inportb(0x2f0); printf("data=%0x",c); }
例 将一个字节输出到输出端口360H。 outportb()的原型: void outportb(int port, unsigned char value); 头文件为dos.h。 程序: main() { outportb(0x360,0x55); }
2.2 I/O端口地址分配 PC系列微机系统支持的端口数目及占用空间: 端口数为1024个;其端口地址空间是从000~3FFH,采用非完全译码,高6位地址线不考虑,因此,其有效的译码地址是地址线A0--A9。
PC系列微机系统中I/O接口分类: 按照PC系列微机系统中I/O接口电路的复杂程度及应用形式,可以把I/O接口的硬件分为两大类: (1)系统板上的I/O接口芯片 (2)扩展槽上的I/O接口控制卡 PC机 A9= PC/AT 前256个系统板 后768个为扩展槽 0 系统板 前512地址 1 扩展槽
(1)系统板上的I/O接口芯片 • 这些芯片大多都是可编程的大规模集成电路,完成相应的接口操作。如定时器/计数器、中断控制器、并行接口等。 • 在PC/AT微机中,这些接口芯片是由如8259、8237A等芯片组成。随着PLD技术的发展,目前PC机系统主板上的所有I/O接口功能,已集成在一片或几片大规模集成电路芯片中,常见的主板外围集成芯片有82380、82C26、82C391等等。
(2)扩展槽上的I/O接口控制卡 这些接口控制卡是由若干个集成电路按一定的逻辑功能组成的接口部件,如多功能卡、图形卡、串行通信卡、网络接口卡等。
I/O端口地址选用原则: • 系统使用的地址用户不能用 • 未使用的地址如是保留地址也尽量不要用 • 用户可使用300H~31FH,且使用地址开关可进行地址选择 • 每个芯片占一个地址区域,这主要是设计上方便
2.3 I/O端口地址译码 • 当CPU执行IN或OUT指令时,CPU地址总线上输出的是16位的端口地址,控制总线上输出与I/O相关的控制信号如/IOR、/IOW、AEN信号等,数据总线上送出或读入要传送的数据。 • 问题提出:怎样利用这些信号来选通某一个端口并实现数据的传送?由接口来完成。 • 即对地址信号译码,将产生的译码信号同/IOR或/IOW结合起来一同控制来选通端口,并对I/O端口进行读或写操作。并将数据从数据总线送出或读入。
I/O地址译码电路 译码电路中用到的信号线: 输入信号:地址信号和控制信号 地址信号: A0~A9 控制信号: SBHE : 控制奇偶地址 I/OCS16: 控制8位还是16位 AEN: 控制非DMA DT/R :传送方向控制 IOR :读 IOW :写 输出信号:地址信号和控制信号逻辑组合产生选中信号
I/O地址的译码方法 I/O端口地址译码的方法灵活多样,通常可由地址信号和控制信号的不同组合来选择端口地址,与存储器的地址单元类似。 一般是把地址信号分为两部分: 1.一部分是高位地址线与CPU或总线的控制信号组合,经过译码电路产生一个片选信号/CS,选择某个I/O接口芯片,从而实现接口芯片的片间选择。 2.另一部分是低位地址线直接连到I/O接口芯片,经过接口芯片内部的地址译码电路选择该接口电路的某个寄存器端口,即实现接口芯片的片内寻址。
I/O端口地址译码电路设计 I/O端口地址译码分类: 1.按照地址译码电路采用的元器件来分 (1)门电路译码 (2)译码器译码 (3)GAL、PLD译码。 2.按照译码电路的形式来看 (1)固定式 (2)可选式译码。
固定式端口地址译码: (1)用门电路进行端口地址译码 • 特点:是一种最简单最基本的端口地址译码方法,一般多采用与门、与非门、反相器及或非门等。 • 如74LS00 74LS08 、 74LS04、74LS32、74LS30等
例1:使用74LS20/30/32和74LS04设计I/O端口 地址为2F8H的只读译码电路(单端口) A11 A0 0 0 1 0 1 1 1 1 1 0 0 0 2 F 8
74LS30 A9 A8A7 A3A2 74LS30 8输入与非门 74LS20 4输入与非门 74LS32 四 2输入或门 74LS04 六反向器 & 74LS32 或 74LS04 A1 A0 AEN IOR & 74LS20
电路说明: A、AEN参加译码,对端口地址译码进行控制: 只有当AEN=0时,即不是DMA操作时译码才有效; 当AEN=1时,即是DMA操作时,使译码无效。避免了在DMA操作时,对这些I/O端口地址进行读/写操作。 B、地址信号A9A8A7A6A5A4A3A2A1A0=1011111000B时,译码电路才有效。 C、对端口进行读操作,所以/IOR=0,只有/IOR=0时,译码电路才有效。
例2:同样的端口地址2F0H,实现对端口2F0H进行读和写两种操作。电路如图2.2。例2:同样的端口地址2F0H,实现对端口2F0H进行读和写两种操作。电路如图2.2。
74LS30 A9 A8A7 A3A2 & 74LS32 ≥1 74LS04 A1 A0 AEN 读 & ≥1 写 IOR ≥1 IOW
电路说明: A、电路的译码输出用/IOR和/IOW信号进行控制,以分别实现读写访问。 B、地址信号不变,此时的一个端口地址,等效于两个端口地址。一个用于输入,一个用于输出。 C、AEN信号的作用同例1。
(2)用译码器进行端口地址译码 • 若接口电路中需要使用多个端口地址时,则采用译码器译码比较方便。译码器的型号很多:如3-8译码器74LS138,8205;4-16译码器74LS154;双2-4译码器74LS139和74LS155等。 • 以3-8译码器74LS138为例,来说明这种译码方式的特点。 • 14pin,DIP封装,74LS138的真值表如表2.3所示。
74LS138译码器 G1 G2 G3 C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0
例2:使用73LS138设计一个系统板上接口芯片 的I/O端口地址译码电路,并且让每个接口芯 片内部的端口数目为32
AENA8 A9 Y0 Y1Y2Y3Y4Y5Y6Y7 G1 G2AG2B C B A 8237 8259 8253 8255 A7A6A5 写DMA页面寄存器 写NMI屏蔽寄存器 IOW
PC/XT系统板上的接口控制电路的端口地址译码电路说明:PC/XT系统板上的接口控制电路的端口地址译码电路说明: A、地址线的高5位A5--A9经过74LS138译码器,分别产生了DMAC8237、中断控制器8259、定时/计数器8253、并行接口8255等接口芯片的片选信号。 B、地址线的低5位A0--A4作为接口芯片内部寄存器的访问地址 当地址是000~01XH时,便有/DMACS输出为低,选中8237,由于A0--A3已接8237,故8237的口地址是000--01FH;其他芯片的端口地址范围也容易看出,如8259的片选地址是02X~03XH,口地址范围是020--03FH。
开关式可选端口地址译码 如果用户要求接口卡的端口地址能适应不同的地址分配场合,或为系统以后扩充留有余地,则可以使用开关式端口地址译码。 特点:这种译码方式可以通过开关使接口卡的I/O端口地址根据要求加以改变而无需改正电路 其电路结构形式有如下几种: • 用比较器和地址开关进行地址译码 • 使用异或门组成的可选式译码电路 • 使用跳线的可选式译码电路
用比较器和地址开关进行地址译码 原理:在接口地址译码中,可采用比较器,将地址总线上送来的地址,或者某一地址范围与预设的地址或地址范围进行比较。若两者相等,便表示地址总线送来的端口地址即为接口地址或接口所用到的口地址范围于是便可以启动接口执行预定的操作。
常用的比较器:有4位比较器74LS85、8位比较器74LS688常用的比较器:有4位比较器74LS85、8位比较器74LS688 • 以74LS85为例,说明此种译码电路的特点。 • 可比较大于、小于或等于,在地址译码中仅使用比较相等的功能,大于、小于则不用
A6A7A8A9 A0A1A2A3 Y0 ABC A2A3A4 S0 B0B1B2B3 A5 G2A S1 AEN G2B S2 Y7 G1 A=B S3 A<B A>B DIP 74LS138 VCC 用比较器组成的 可选式译码电路 74LS85
使用异或门组成的可选式译码电路 使用74LS136做异或门(4异或门) X异或1=X;X异或0=X
S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 DIP +5V Y0…. Y7 2 2 74LS138 12 9 5 12 9 5 9 5 5 G2AG2B A B C G1 =1 74LS36 =1 74LS36 =1 74LS36 3 6 8 11 13 10 4 1 3 6 8 11 13 10 4 1 3 6 8 11 13 10 4 1 A0A1A2 A11 IOW IOR A3… A6 A7… A10 AEN 用异或门组成的可选式译码电路
使用跳线的可选式译码电路 可以使用跳线或跳接开关,对译码器输入地址作反 相或不反相的选择
AEN 1 A9 74LS30 1 A8 & 1 74LS04 A3 74LS32 1 Y ≥1 1 & 1 A0 跳接开关可选式译码电路 1
2.4GAL器件在I/O端口地址译码中的应用 GAL器件的特点 GAL器件的开发工具和开发步骤
GAL器件的特点 GAL器件是可编程逻辑器件PLD(Programmable Logic Device)的一种。 1.GAL器件的特点:较高的功能集成度,可以实现组合逻辑和时序逻辑电路的多种组合;电可擦除;硬件加密;灵活的现场可编程特性;和较快的速度。 2.PLD器件的种类: • GAL(Generic Array Logic) 一片GAL的电路规模可达几百门 • EPLD/CPLD(Erasable Programmable Logic Device) EPLD规模可达几千门 • FPGA(Field Programmable Gate Array) FPGA的规模可高达几--100万门
GAL器件的开发工具和开发步骤: 1.开发工具: (1)硬件工具:编程器(与EPROM编程器类似);(2)软件工具:专用的编译程序和汇编程序。一般GAL可编译的输入文件格式有:布尔方程、真值表、状态转换图。 以FM(FAST MAP)为例说明GAL器件的开发步骤和方法。FM是通用的汇编型软件,它可对一定格式的GAL编程输入文件(扩展名.PLD)进行汇编,生成列表文件(.LST)、溶丝状态图文件(.PLT)、分布数据代码文件(.JED),然后利用编程器把分布数据写入到GAL。
2.GAL器件的开发步骤和方法 以GAL16V8为例说明GAL的开发过程。 普通型器件GAL16V8的特点 (1)GAL16V8的1--9和11引脚固定作输入使用 13--18也可以配置成输入引脚 因此输入最多可为16个。 (2)GAL16V8最多可配置8个输出引脚。 (3)GAL16V8的规模为64×32。 (4)它可被配置成寄存器模式、复合模式和简单模式