端口(Port)是接口电路中能被CPU直接访问的寄存器(端口是寄存器,寄存器是存储器,容量小速度快)。CPU经过这些地址即端口向接口电路中的寄存器发送命令,读取状态和传送数据,所以,一个接口能够有几个端口,如状态口、数据口和命令口,分别对应于状态寄存器、数据寄存器和命令寄存器。编程
● 状态端口
状态端口(State Port)主要用来指示外部设备的当前状态。每种状态用一个二进制位表示,每一个外部设备能够有几个状态位,它们可被CPU读取,以测试或检查外部设备的状态,决定程序的流程。通常接口电路中常见的状态位有准备就绪位(Ready)、外部设备忙位(Busy)、错误位(Error)等。post
● 数据端口测试
数据端口(Data Port)用以存放外部设备送往CPU的数据以及CPU输出到外部设备去的数据。这些数据是主机和外部设备之间交换的最基本信息,长度通常为1-4字节。数据端口主要起数据缓冲做用。编码
● 命令端口spa
命令端口(Command Port)也称控制端口(Control Port),用来存放CPU向接口发出的各类命令和控制字,以便控制接口或设备的动做。接口功能不一样,接口芯片的结构也就不一样,控制字的格式和内容天然各不相同。通常可编程接口芯片每每具备工做方式命令字、操做命令字等。设计
一般所说的I/O操做是指对I/0端口的操做,而不是对I/O设备的操做,即CPU所访问的是与I/O设备相关的端口,而不是I/O设备自己。而I/O操做也就是CPU对端口寄存器的读写操做。CPU对数据端口进行一次读或写操做也就是与该接口链接的外部设备进行一次数据传送;CPU对状态端口进行一次读操做,就能够得到外部设备或接口自身的状态代码;CPU把若干位控制代码写入控制端口,则意味着对该接口或外部设备发出一个控制命令,要求该接口或外部设备按规定的要求工做。blog
I/O端口的编址方式主要有两种:内存与I/O端口统一编址和I/O端口单独编址。接口
统一编址是指在整个存储空间中划分出一部分地址空间给外设端口使用,即把每个I/O端口看做一个存储单元,与存储单元同样编址,访问存储器的全部指令都可用来访问I/O端口,不用设置专门的I/O指令,因此称为存储器映射I/O编址方式,地址空间分布状况如图1-9所示 。 摩托罗拉公司的MC6800及68HC05等处理器就采用了这种方式访问I/O设备。
这种方式的优势:内存
这种方式的缺点是路由
独立编址是指对系统中的I/O端口单独编址,与内存单元的地址空间相互分开,各自独立,采用专门的I/O指令来访问具备独立空间的I/O端口,地址空间分布状况如图1-10所示 。8086/8088系统中就采用这种编址方式。
优势:
以上这两种I/O编址方式各有利弊,不一样类型的CPU可根据外部设备特色采用不一样的编制方式。
项目名:
设计一个有6组I/O端口地址的译码电路
项目要求与目的:
(1)项目要求:经过项目了解74LS138译码器进行地址译码的方法和工做原理。
(2)项目目的:
●了解74LS138译码器的真值表。
●了解用译码器设计I/O端口地址的方法。
项目说明:
74LS138译码器有8个输出,本项目只用其中6个。而地址线的高5位A5~A9通过74LS138译码器,分别产生DMA控制器8237A、中断控制器8259A、定时/计数器825四、并行接口8255A等接口芯片的片选信号,而地址线的低5位A0~A4做为接口芯片内部寄存器的访问地址。由74LS138译码器真值表可知,当地址为000~01XH时,使输出为低,选中8237A,因为低位地址线A0~A3已接8237A,故8237A的端口地址为000H~01FH。其余端口与此同理,如8259A的片选地址是02X~03XH,端口地址为020~03FH。
项目电路图:
一个有6组I/O端口地址的译码电路如图1-9所示。电路由地址总线、控制总线、74LS138译码器和门电路等组成。
I/O端口地址分配
不一样类型的微机系统采用不一样的I/O地址编排方式,I/O地址空间的划分也各不相同。对80x86而言,采用独立编排方式,I/O端口地址的16位,最大寻址范围为64K个地址。可是,在IBM-PC机及其兼容机的设计中,主板上只用了10位I/O端口地址线,所以支持的I/O端口数位1024个,地址空间为0000H~03FFH,而且把前512个端口分配给了主板,后512个端口分配给了扩展槽上的常规外设。后来在PC/AT系统中,做了一些调整,其中前256个端口(000~0FFH)供系统板上的I/O接口芯片使用,如表1-2所示。后768(100~3FFH)供扩展槽上的I/O接口控制卡使用,如表1-2所示。按照I/O设备的配置状况,I/O接口的硬件分为以下两类。
(1) 系统板上的I/O接口
系统板上的I/O接口也称为板内接口,寻址到的都是可编程大规模集成电路,完成相应的板内接口操做。如定时/计数器、中断控制器、DMA控制器、并行接口等。随着大规模集成电路的发展,因此I/O接口芯片或控制器都已经集成在一片或几片大规模集成电路芯片中,造成了主板芯片组,并命名为南/北桥、MCH/ICH等。表1-2所示的各类接口芯片,虽然在主板上不能看见,可是仍然完整地存在于主板芯片组中(通常都在南桥中),其板内地址也保持不变。
(2)扩展卡上的I/O接口
扩展卡主要是指插接在主板插槽上的接口卡,经过系统总线与CPU系统相连。这些扩展卡通常由若干个集成电路按必定得逻辑组成一个部件,如软驱卡、硬驱卡、图形卡、声卡、打印卡、串行通讯卡等,如表1-3所示。
I/O端口地址译码
微机系统中有多个接口存在,接口内部每每包含多个端口,CPU是经过地址对不一样的端口加以区分的。把CPU送出的地址转变为芯片选择和端口区分依据的就是地址译码电路。每当CPU执行输入输出指令时,就进入I/O端口读写周期,此时首先是端口地址有效,而后是I/O读写控制信号TOR或有效,这样就能够很好的把端口地址译码产生的译码信号同或结合起来,一同控制对I/O端口读或者写。接口地址译码方法不少,下面主要介绍两种。
(1)用门电路进行I/O端口地址译码
门电路译码就是采用与门、与非门、反相器及或非门等简单逻辑门器件,如74LS20、74LS30、74LS3二、74LS0八、74LS04等,构成译码电路。这是一种最基本的I/O端口地址译码方法,下面经过举例来讲明设计方法。
【例1-5】 使用74LS20/30/32和74LS04设计I/O端口地址为2F8H的只读译码电路。
分析:若要产生2F8H端口地址,则译码电路的输入地址就应具备如表1-4所示的值。
设计:按照表1-4中地址表的值,采用门电路就能够设计出译码电路,如图1-10(a)所示。
图1-10(a)中AEN信号必须参加译码,由于AEN为高电平时,I/O处于DMA方式,或信号由DMA控制器发出;AEN为低电平时,I/O处于正常方式,或信号由CPU发出。由于该接口电路中I/O处于正常方式,AEN必须为低电平,故用AEN信号参加译码来区分这两种方式。
同理可设计出能执行读/写操做的2E2H端口地址的译码电路,如图1-10(b)所示。
(2)译码器进行I/O端口地址译码
若接口电路中须要使用多个端口地址,则可采用译码器来进行译码。译码器的型号有不少,经常使用的译码器有3-8译码器74LS138;4-16译码器74LS154;双2-4译码器74LS13九、74LS155等。下面经过举例来讲明设计方法。
【例1-6】 使用74LS138设计一个系统板是上接口芯片的I/O端口地址译码电路,而且让每一个接口芯片内部的端口数目为32个。
分析:因为系统板上的I/O端口地址分配在000~0FFH范围内,故只使用低8位地址线,这意味着A9和A8两位应赋0值。为了让每一个被选中的芯片内部拥有32个端口,只要留出5根低地址线不参加译码,其他的高位地址线做为74LS138的输入线,参加译码,或做为74LS138的控制线与AEN一块儿,控制74LS138的译码是否有效。由上述分析,能够获得译码电路输入地址线的值,如表1-5所示。
对于译码器74LS138的分析有两点:一是它的控制信号线G一、和。只有当知足控制信号线G1为高电平, ==0时,74LS138才能进行译码。二是译码的逻辑关系,即输入(C,B,A)与输入(Y0~Y7)的对应关系。74LS138输入/输出的逻辑关系,如表1-6所示。
从表1-6可知,若知足控制条件,即G1为高电平, ==0,则由输入端C、B、A的编码来决定输出:CBA=000,则为低电平,其余输出端为高电平;CBA=001,为低电平,其余输出端为高电平;…;CBA=111,为低电平,其余输出端为高电平。由此可分别产生8个译码输出信号(低电平)。若控制条件不知足,则输出全“1”,不产生译码输出信号,即译码无效。