7.2.5 I/O 的编址

7.2.5 I/O 的编址

1.I/O 接口

在7.2.3节中,了解了I/O 接口的基本组成。当CPU 与I/O 设备通信时,传送的信息主要包括数据信息、状态信息和控制信息。在I/O 接口电路中,这些信息将分别进入不同的寄存器,通常将这些寄存器和它们的控制逻辑统称为I/O 接口(Port),CPU 可对I/O 接口中的信息直接进行读写。在一般的接口电路中都要设置以下3种接口:

(1)数据接口

数据接口(Data Port)用来存放I/O 设备送往CPU 的数据以及CPU 要输出到I/O 设备去的数据。这些数据是主机和I/O 设备之间交换的最基本的信息,数据接口的长度一般为1~2字节。数据接口还起着数据缓冲的作用。

(2)状态接口

状态接口(Status Port)主要用来指示I/O 设备的当前状态。每种状态用1位表示,每个I/O 设备可以有几个状态位,它们可由CPU 读取,以测试或检查I/O 设备的状态,决定程序的流程。需要指出的是,除了状态接口中的内容外,接口电路中往往还会有若干状态线,它们用电平的高低来指示I/O 设备当前状态,实现CPU 与I/O 设备之间的通信联络,它们的名称和电平与状态位之间不一定完全对应。I/O 接口电路状态接口最常用的状态位有如下三种:

①准备就绪位(Ready)。如果是输入接口,并且该位为1,表明接口的数据寄存器已准备好数据,等待CPU 来读取;当数据被CPU 取走后,将该位清为0。如果是输出接口,并且这一位为1,则表明接口中的输出数据寄存器已空,即上一个数据已被输出设备取走,可以接收CPU 的下一个数据了;当新数据到达后,Ready位即被清0。对于不同的I/O 接口,这个状态位所用的名称可能不一样,例如,也可能用输入缓冲器空,输出缓冲器满,发送缓冲器空等,但它们的含义和用法均与准备就绪位(Ready)类似。

②忙碌位(Busy)。用来表示输出设备是否能接收CPU 所传数据。若该位为1,表示输出设备正在进行输出数据传送操作,暂时不允许CPU 送来新的数据。本次数据传送完毕,Busy位清0,表示输出设备已处于空闲状态,允许CPU 将下一个数据送到输出接口。

③错误位(Error)。如果在I/O 设备的数据传送过程中发现产生了某种错误,可将错误位置1。当CPU 查到出错状态后便启动相应的处理过程,例如,显示错误信息、重新传送、中止操作等。

(3)命令接口

命令接口(Command Port)也称为控制接口(Control Port),它用来存放CPU 向I/O 接口发出的各种命令和控制字,以便对接口或设备进行控制。常见的I/O 命令信息位有启动位、停止位、中断允许位等。I/O 接口芯片不同,控制字/命令字的格式和内容也是各不相同的,常见的有方式选择控制字、操作命令字等。

一般来说,CPU 与I/O设备交换的数据是以字节为单位进行的,因此一个I/O 设备的数据接口宽度为8位。而状态口和命令口可以只包含一位或几位信息,所以不同I/O 设备的状态口、命令口可以共用一个接口。通常可用D触发器和三态缓冲器来构成这两种接口。

由上所述,在I/O 接口中,数据信息、状态信息和控制信息的含义各不相同,按理说这些信息应分别传送。但在微机系统中,CPU 通过接口和I/O 设备交换数据时,只有输入(IN)和输出(OUT)两种指令,所以只能把状态信息和命令信息也都当作数据信息来传送。在数据传送的时候,对状态信息要进行读操作,作为输入数据;对控制信息要进行写操作,作为输出数据,这样3种信息都可以通过数据总线来传送了。在数据交换的过程中,这3种信息将被送入对应的3种不同接口的寄存器,从而实现接口不同的功能。

2.I/O 接口的寻址方法

CPU 对I/O 设备的访问也就是对I/O 接口电路中相应的接口进行访问,因此和访问存储器一样,也需要由译码电路来形成I/O 接口地址。I/O 接口的编址方式有两种,分别称为存储器映象编址方式和I/O 单独编址方式。

(1)存储器映象编址方式

若把微机系统中的每一个I/O 接口都看作一个存储单元,并与存储器单元一样统一编址,这样访问存储器的所有指令均可用来访问I/O 接口,不用设置专门的I/O 指令,这种编址方式称为存储器映像的I/O 编址方式(Memory Mapped I/O)。这种编址方式的优点是:微处理器的指令集中不必包含专门的I/O 操作指令,简化了指令系统的设计;可以使用类型多、功能强的存储器访问指令,对I/O 设备进行方便、灵活的操作。缺点主要是在统一编址中,I/O 接口占用了存储单元的地址空间。

(2)I/O 单独编址方式

若对微机系统中的输入/输出接口地址单独编址,构成一个I/O 空间,它们不占用存储空间,系统用专门的IN 指令和OUT 指令来访问这种具有独立地址空间的接口,这种寻址方式称为I/O 单独编址方式。Intel 8086和Intel 8088等微处理器都采用这种寻址方式来访问I/O 设备。在Intel 8086中,使用地址总线的低16位(A 0~A 15)来寻址I/O 接口,最多可以访问216=65536个输入或输出接口。Intel 8086 CPU 中的M/控制信号用来区分是I/O 寻址还是存储器寻址,当它为高电平时,表示CPU 执行的是存储器操作,为低电平时则是访问I/O 接口。

I/O 单独编址方式的优点是:将I/O 指令和存储器访问指令区分开,使程序清晰,可读性好;I/O 指令长度短,执行的速度快。I/O 接口不占用存储内存空间;I/O 地址译码电路较简单。此种编址方式的不足之处是:CPU 指令系统中必须设有专门的IN 和OUT 指令,这些指令的功能没有存储器访问指令强;CPU 还需提供能够区分访问内存和访问I/O 接口的硬件引脚信号。