I/O接口硬件分类
按照I/O设备的配置情况和复杂程度,,I/O接口的硬件分成两类:
[1]系统板上的I/O芯片
这些芯片大多都是可编程的大规模集成电路,完成相应的接口操作.如定时/计数器、中断控制器、DMA控制器、并行接口以及利用单片机构成的键盘控制器等。 [2]I/O扩展槽上的接口控制卡
这些控制卡(适配器)是由若干个集成电路按一定的逻辑组成的一个部件,如软驱卡、硬驱卡、图形卡、声卡、打印卡、串行通信卡等。
I/O端口地址分配
不同的微机系统对I/O端口地址的分配是不同的。PC微机是根据上述I/O接口的硬件分类,把I/O 空间分成两部分。
虽然,PC微机I/O地址线可有16根.对应的I/O端口编址可达64K字节,但由于IBM公司当初设计微机主板及规划接口卡时,基端口地址译码是采用非完全译码方式,即只考虑低10位地址线A0~A9,而没有考虑高6位地址线A10~A15,故其I/O端口地址范围是000H~003FFH,总共只有1024个端口,并且把前512个端口分配给了主板,后512个端口分配给了扩展槽上的常规外设。后来在PC/AT系统中,作了一些调整,其中前256个端口(000~OFFH)供系统板上的I/O接口芯片使用,如表2.l所示。后768
(100-3FFH)供扩展槽上的I/O接口控制卡使用,如表2.2所示
在表2.1中分配给每个接口芯片的I/O端口地址,在实际使用中,并未全部用完。例如,中断控制器8259A只使用了前面2个端口地址,20H、21H(主片)和AOH、AIH(从片)。并行接口芯片8255A,只使用了前面4个端口地址,60H-63H。使用端口地址最多的DMA控制器芯片8237A,也只用了前面的16个地址(0-FH)。从表2.2中,可以看到允许用户使用的端口地址是300H-3lFH。这一段地址是留给用户在开发IBM-PC系列机功能模块(插板)时,使用的端口地址,系统是不会占用它的。除在表2.l和表二2.2中已经分配了的I/O地址之外,其余的地址均由厂商保留使用 I/O用端口地址选用的原则
只要设计I/O接口电路,就必然要使用I/O端口地址。为了避免端口地址发生冲突,在选用1/O端口地址时要注意: [1]凡是被系统配置所占用了的地址一律不能使用
[2]原则上讲,未被占用的地址,用户可以使用,但对计算机厂家申明保留的地址,不要使用,否则,会发生I/O端口地址重叠和冲突,造成用户开发的产品与系统不兼容而失去使用价值
[3]一般,用户可使用300~31FH地址,这是IBM-PC微机留作实验卡用的,用户可以使用。但是,由于每个用户都可以使用,所以在用
户可用的这段I/O地址范围内,为了避免与其他用户开发的插板发生地址冲突,最好采用地址开关。
第三节I/O用端口地址译码
如何把来自地址总线的地址代码翻译成所要访问的端口(寄存器)?CPU为了对I/O端口进行读写操作,就需确定与自己交换信息的端口(寄存器),那么,是通过什么媒介把来自地址总线上的地址代码翻译成为所需要访问的端口(寄存器)的,这就是所谓的端口地址译码问题。这个“媒介”就是I/O地址译码电路。
I/O用地址译码电路工作原理及作用
分析I/O设备的输入信号和输出信号 [1]译码电路的输入信号
首先,应该指出的是,I/O地址译码电路不仅仅与地址信号有关,而且与控制信号有关。因此,I/O端口地址译码电路的作用是把地址和控制信号进行逻辑组合,从而产生对接口芯片的选择信号。由于I/O地址译码除了地址范围受上述地址分配的限制之外,还要满足其他一些控制条件,所以,译码电路的输入端除了地址信号线之外,还要引入一些控制信号。例如,用SBHE信号控制端口奇偶地址;用非I/OCS16信号控制8位或16位I/O 端口;用AEN信号控制非DMA传送以及用IOR和IOW信号控制对端口的读/写等。为此,在设计地址译码电路时,除了根据2.2节选用I/O端口地
址的原则,精心选择地址范围之外,还要根据CPU与I/O端口交换数据时的流向(读/写)、数据宽度(8位/1 6位)以及是否采用奇偶地址和DMA传送方式的要求来引入相应的控制信号,参加地址译码。
[2]译码电路的输出信号
译码电路把输入的地址线和控制线经过逻辑组合后,所产生的输出信号线就是1根选中线,低电平有效。即若译码电路的输出线为低,则表示译码有效;若输出线为高,则译码无效。当I/O地址译码有效,选中一个接口芯片时,这个芯片内部的数据线打开,并与系统总线相连,从而打通了接口电路与系统总线的通路。而其他接口芯片的选中线无效,于是芯片内部呈高阻抗,自然就与系统总线隔离开来,从而关闭了接口电路与系统总线的通路。CPU就是这样利用译码电路来选择与之交换信息的接口电路的。
I/O用地址译码方法
I/O端口地址译码的方法灵活多样,可按地址和控制信号不同的组合去进行译码。一般原则是把地址线分为两部分:一部分是高位地址线与CPU的控制信号进行组合,经译码电路产生 I/O接口芯片的片选CS信号,实现系统中的片间寻址;另一部分是低位地址线不参加译码,直接连到I/O接口芯片,进行I/O接口芯片的片内端口寻址,即寄存器寻址。所以,低位地址线,又称接口电路中的寄存器寻址线。低位地址线的根数决定于接口中寄存器的个数。例如,并行
接口芯片8255A内部有4个寄存器,就需要2根低位地址线。串行接口芯片825 1A内部只有2个寄存器,就只需1根低位地址线。若从系统的角度来考虑,则低位地址线的根数应由系统中含有寄存器数目最多的接口芯片来决定。
I/O端口地址译码电路设计
译码电路的形式可分为固定式译码和可选式译码。若按译码电路采用的元器件来分,又可分为门电路译码和译码器译码。 [1]固定式端口地址译码
所谓固定式是指接口中用到的端口地址不能更改。目前,接口卡中一般是采用固定式译码。在固定式译码电路中,又分单个端口地址译码和多个端口地址译码两种情况。若仅需一个端口地址,则采用门电路构成译码电路。
例1:使用74LS20/30/32和74LS04设计I/O用端口地址为2F8H的只读译码电路。
分析:若要产生 2F8H端口地址,则译码电路的输人地址线就应具有如表 2.3所示的值
设计:按照 表2.3中地址线的值,采用门电路就可以设计出译码电路,如图2.l(a)所示。
图中AEN参加译码,它对端口地址译码进行控制,只有当AEN=0时,即不是DMA操作时译码才有效;当AEN=l时,即是DMA操作时,译码无效。图2.l中,要求AEN=0,是为了避