第五章并行输入输出接口第一节I/O接口的基本概念一、I/O接口的基本功能1、I/O接口的作用⑴解决高速主机与低速外围设备间的矛盾,即速度配合;⑵处理外围设备与CPU之间的不同的信息格式即信号格式配合;⑶使主机与外设协调工作,即时序配合;⑷外设和主机在信号电平一致,即电平配合。2、I/O接口传送信息的类型I/O接口传送的信息可分为三类:数据信息,状态信息和控制信息。⑴数据信息:数据信息可分为四种①数字量,二进制数据,最小单位是一个bit(位),还有字节、字等。②模拟量,现场信号大多是由传感器来的模拟电压或电流,他们必须经过A/D转换,变成数字量才能进入计算机,有些接口有处理模拟量的电路,称为模拟接口。③开关量,开关量只有两种状态,即“开”或“关”,可用一位二进制数表示,如“1”表示“开”,“0”表示“关”。④脉冲量,脉冲量是以脉冲形式表示的一种信号,如计算机中用到的定时脉冲或控制脉冲等。⑵状态信息:状态信息是反映外设当前所处的工作状态,以作为CPU与外设间可靠交换数据的条件。当输入时,它告诉CPU,有关的输入设备是否准备好(Ready=1?);输出时它告诉CPU,输出设备是否空闲(Busy=0?)。⑶控制信息:它用于控制外设的启动和停止,以及给出命令字,用于设置接口的工作方式。通常接口中三种信息有不同的寄存器传送,如数据输入寄存器、数据输出寄存器、状态寄存器和控制(命令)寄存器,他们使用不同的端口地址来区分不同性质的信息。3、I/O接口的主要功能⑴数据缓冲功能,接口中有数据输入寄存器和输出寄存器,用于解决主机与外设在工作速度上的矛盾。⑵提供联络信息,接口中有状态寄存器⑶信息格式的转换,包括电平转换、并串转换等。⑷设备选择,每台外设都有设备地址,用于与其他设备区别。⑸中断管理,将在中断一章中详细介绍。⑹可编程功能,使接口具有多功能和灵活设置。⑺对外设的控制和监测功能二、I/O接口的基本结构如图5.1所示。电路包括四组寄存器和一个中断逻辑。这些寄存器也被称为端口,每个端口有一个端口地址,CPU通过这些端口与外设交换数据。接口有两个界面,一面是计算机总线;另一面是外围设备。图5.1接口电路的基本结构三、I/O端口的编址方式1、I/O端口和存储器统一编址该方式是将存储器地址空间的一部分作为I/O设备的地址空间,所以I/O端口地址也是一个存储器地址。优点是CPU访问存储器的指令都可以访问I/O端口,不需要专门的I/O指令。二是使I/O控制逻辑简单,其引脚减少。缺点是I/O端口占用了一部分存储器空间;二是访存指令通常比专用的I/O指令长,所以执行时间较长。MOTOROLA的微机系列如MC6800系列,MC68000系列都采用这一方法。APPLE公司如6502系列也采用这一方法。2、I/O端口和存储器单独编址基本想法是I/O端口地址和存储器地址分开,单独编址,在指令系统中分别设立存储器读写指令和I/O端口读写指令。在地址总线上的地址信息究竟是存储器地址还是I/O地址,一般是在CPU上设置专门的控制线,如=1为I/O操作,=0为存储器操作。优点:I/O端口不占用存储器地址空间;单独I/O指令比较短,地址译码方便,指令执行速度快。缺点:需要单独的I/O指令,这些指令一般功能简单,通常只有读写功能;需专门的I/O控制线,增加了CPU本身控制逻辑的复杂性。Intel系列和Zilog系列采用此方法。MIO/四、I/O接口的地址分配每台微机都给I/O端口分配相应的端口地址。IBM/PC-XT使用10位地址作为I/O端口地址,即可用端口有1024个,以后的PC机(8086)用16位地址作为I/O端口地址,即可用端口有65536个。可用测试工具QAPLUS等软件检测系统配置及其端口地址使用情况;也可查阅每台机器的硬件手册。五、I/O端口地址的译码及片选信号的产生I/O端口地址的生成一般是由地址信号A9-A0的高位产生译码的片选信号CS,低位产生片内的寄存器地址。在I/O操作时,CPU执行IN或OUT指令,首先是端口地址有效,然后是IOR或IOW有效。1、利用门电路进行译码如图5.2所示,端口地址为348H-34FH,由于A0-A2三位地址没有参加译码,所以一个片选信号占用8个地址单元。实际上这低三位地址加到芯片上,产生片内寄存器的地址。A9A8A7A6A5A4A3A2A1A01101001×××2、用集成译码器进行译码如图5.3所示,使用74LS138集成译码器译出8个端口地址。由于所有A0-A9地址线都参加译码,所以称为全译码,这时每条线对应一个端口地址。A9A8A7A6A5A4A3A2A1A0=11,0101,1×××1101011×××=358-F3、开关式可选择译码电路如果用户希望译码器能适应不同的地址分配场合,则可采用开关式地址可选择译码电路,如图5.4所示。电路用DIP开关选择地址,并使用了一片74LS688八位数据比较器。当输入端P0-P7的地址与设置端Q0-Q7的状态一致时,输出P=Q为低,其输出控制地址译码芯片74LS138的译码。图中,上面一片74LS138产生读端口地址,下面一片74LS138产生写端口地址,这样使8个口地址作16个口地址用。此电路必须A9=1,AEN=0时才能有效译码。(AEN=0是CPU控制总线,AEN=1时DMA控制总线)。4、使用可编程芯片进行地址译码目前大多数地址译码采用可编程芯片,如GAL或PAL器件。把译码电路的逻辑关系按说明文件格式写入一文件,然后用编程器把逻辑关系写入GAL器件中。第二节I/O数据传送控制方式CPU与外设之间数据传送的方式通常有3种,即程序控制方式,中断控制方式和直接存储器方式(DMA)。一、程序控制方式程序传送是指CPU与外设间交换数据在程序控制(即IN或OUT指令控制)下进行。1、无条件传送这种方式适合于外设总是处于准备好的情况,因此程序不必检查外设的状态。如图5.5所示,端口地址译码器产生选通信号,RD信号为读,WR信号为写,开放三态缓冲器(读)或写入锁存器,进行数据读或写。图5.5无条件传送方式例1:一个采用无条件传送的数据采集系统图5.6无条件输入的数据采集系统这是一个16位精度的数据采集系统。被采集的8个模拟量,由继电器绕组P0、P1、…、P7分别控制触点K0、K1、…、K7逐个接通。每次采样转换成16位BCD码,高8位和低8位通过两个端口(端口地址为11H和10H)输入到计算机。CPU通过端口20H输出控制信号,以控制继电器的吸合,实现采集不同通道的模拟量。采集过程如下:(1)先断开所有的继电器触点,不采集数据;(2)延迟一段时间后,使K0闭合,采集第1个通道的模拟量,并保持一段时间,以使数字电压表将模拟电压转换为16位BCD码;(3)分别将高8位与低8位BCD码存入内存,并转存到DSTOR开始的数据区;(4)利用移位与循环实现8个模拟量的依次采集和存储。数据采集程序如下:START:MOVDX,0100H;01H置吸合第一个继电器;00断开所有继电器代码LEABX,DSTOR;置数据缓冲区地址指针XORAL,AL;清AL和CFAGAIN:MOVAL,DLOUT20H,AL;断开所有继电器CALLNEARDELAY1;继电器触点释放时间MOVAL,DHOUT20H,AL;先使P0吸合CALLNEARDELAY2;继电器触点闭合和转换时间INAL,10H;输入低8位INAH,11H;输入高8位MOV[BX],AX;存入内存INCBX;地址指针加2INCBXRCLDH,1;DH带进位循环左移一位JNCAGAIN;8个通道完了吗?没有,循环DONE:…;已完,则执行其他程序2、程序查询传送方式⑴程序查询式输入图5.7查询式输入的接口电路如图5.7所示,CPU从接口读取状态信息,判断READY是否为1?即是否准备好,若已准备好,则读入数据。查询部分程序如下:POLL:inal,status_port;读状态端口的信息testal,80H;设READY信息在D7位jePOLL;D7=1未就绪,则循环再查inal,data_port;已就绪,则读入数据其中:status_port是状态口地址,data_port是数据口地址。⑵查询式输出如图5.8所示,CPU从接口读取状态信息,判断BUSY是否为1?BUSY=0表示外设不忙,则CPU执行输出指令,输出数据到外设。图5.8查询式输出接口电路查询式输出的部分程序如下:POLL:inal,ststus_port;读状态口,查D7位testal,80HjePOLL;D7=1即忙线=1,则循环moval,store;否则外设空闲,从内存取数outdata_port,al;输出到外设的数据口3、一个查询方式的数据采集系统如图5.9所示,有8个模拟量输入的数据采集系统,8个模拟量经多路开关选择其中一路,每次一个模拟量到A/D转换器;同时A/D转换器由端口4输出的D4控制启动与停止。A/D转换器的READY信号由端口2的D0输出至CPU数据总线;A/D转换后的数据由端口3输至数据总线。图5.9查询式数据采集系统这里用到三个端口地址,端口2为状态口,端口3为数据口,端口4为控制口用于选择那一路。数据采集过程的程序如下:START:movdl,0F8H;设置启动信号,低3位选通多路开关movax,segdstor;设置输入数据的内存地址指针moves,ax;段地址送esleadi,dstor;偏移地址送diAGAIN:moval,dlandal,0efH;使D4=0out04,al;停止A/D转换calldelay;等待停止A/D转换操作完成moval,dl;使al=0F8H,D4=1out04,Al;选输入通道并启动A/D转换POLL:inal,02;从02端口输入状态信息shral,1;查AL的D0jncPOLL;判READY=1?若D0=0,未准备好,则循环inal,03;若已准备好,则经端口3输入采样数据到ALSTOSB;输入数据转送至内存单元,地址指针自动加1incdl;输入模拟通道号加1jneAGAIN;8个模拟量未完则循环…;输入已完,执行别的程序二、中断传送程序查询传送方式明显的缺点是CPU利用率低,不能满足实时输入输出的需要,中断方式可以较好地解决这一问题。所谓中断是指程序运行中出现了某种紧急事件,CPU必须中止现正在执行的程序,转去处理该紧急事件(执行一段中断服务程序),并在处理完后返回原运行的程序的过程。完整的中断处理过程包括中断请求、中断判优、中断响应、中断处理和中断返回。为了使中断服务程序不影响主程序的执行,需把主程序断点处的有关寄存器的内容保存下来,称之为保护现场;在中断服务程序操作完成后再恢复这些寄存器的内容,称之为恢复现场。用中断方式时,外设处于就绪状态时,例如输入设备数据准备好时,或输出设备不忙可以接收数据时,便向CPU发出中断请求,CPU暂停当前执行的主程序进入中断响应,与外设进行一次数据交换,操作完成后再继续执行原来的主程序。通常CPU在执行每一条指令的末尾处会检查外设是否有中断请求(这种查询是由硬件完成的,不占用CPU的工作时间),如果有,在中断允许(即IF=1)的情况下,CPU将保留下一条指令的地址(断点)和当前标志寄存器的内容,转去执行中断服务程序,操作完成后恢复断点和标志寄存器的内容,继续执行原来被中断的程序。中断方式的优点很明显,大大提高了CPU的工作效率,而且外设有申请中断服务的主动权。有关中断的详细工作情况将在第六章中介绍。三、DMA方式利用程序中断方式,虽然可以提高CPU的工作效率,但它仍需要由程序来传送数据,并在中断处理时要“保护现场”和“恢复现场”等,要占用一定时间,是每传送一个字节大约要几十微秒到几百微秒,这对于高速外设就显得太慢了。DMA方式是一种由专门的硬件电路执行I/O交换的传送方式,它让外设接口与内存直接进行高速的数据交换,而不必经过CPU,实现对存储器的直接存取。这种专门的硬件叫DMA控制器,简称DMAC,如图5.10。如图所示,当接口准备好就向DMAC发DMA请求,接