1、,输入/输出系统,第六章,教学目的和要求本章介绍输入输出的一般原理,主要涉及接口概念、CPU与输入/输出设备之间的接口信号以及四种数据传送方式、DMA控制器结构、工作原理、编程方法。要求读者重点掌握接口概念、I/O接口的基础知识、I/O端口读写方法和控制技术。,输入/输出系统,输入/输出系统,内容提要接口概念CPU与I/O设备之间的接口信息CPU与外设之间的数据传送方式DMA控制器8237A,接口概念,输入和输出设备统称为外部设备,它是计算机系统的重要组成部分。 在微型计算机中,CPU通过接口与各种外部设备交换信息。进行信息的输入/输出时,需要设计把外部设备与微处理器连接起来的电路,即接口电路
2、。,接口概念,当实现一个数据的输入输出操作时,CPU必须在众多的外部设备中寻找一个确定的设备,如何寻找这一特定的外部设备就是输入输出寻址所解决的问题。 CPU寻址外设可以有两种方式:存储器映象方式 这种方式是将I/O端口和存储器单元同等看待,一起编址,相当于给每个I/O端口分配一个存储器地址。 隔离I/O方式这种编址方式是将I/O端口和存储器作不同的处理,分开编址,即两者的地址空间是互相“隔离”的,I/O结构不会影响存储器的地址空间。,CPU与I/O设备之间的接口信息,CPU与一个外设交换信息,通常需要有以下一些信号:数据(Data)在微型机中,数据通常为8位、16位或32位,它大致可分为三种
3、基本类型:数字量信息:一种二进制形式的数据或经过编码的二,CPU与I/O设备之间的接口信息,进制形式的数据。最小单位为“位”(bit),8位称为一个字节(Byte)。 模拟量信息:用模拟电压或模拟电流的幅值大小表示的物理量。开关量信息:只有“开”或“关”两种状态的信息。用一位二进制数表示。状态信息(Status)状态信息用来表示外设所处工作状态。在输入时,有输入装置的信息是否准备好(Ready);在输出时输出装置是否有空(Empty),若输出装置正在输出信息,则以忙(Busy)指示等等。,CPU与I/O设备之间的接口信息,控制信息(Control)这类信号是由CPU经接口发出的,用于控制外设工
4、作信号。例如控制输入输出装置启动或停止等。,CPU与I/O设备之间的数据传送方式,无条件传送方式查询传送方式中断传送方式直接数据通道传送(DMA),CPU与I/O设备之间的数据传送方式,无条件传送方式无条件传输方式是指传输数据过程中,输入或输出数据一方不查询判断对方的状态,进行无条件的数据传输。,CPU与I/O设备之间的数据传送方式,查询传送方式查询传送方式就是微型计算机利用程序不断地询问外部设备的状态,根据它们所处的状态来实现数据的输入和输出。,CPU与I/O设备之间的数据传送方式,查询式输入程序控制下的查询式输入方式,在传送前,必须去查询一下外设的状态,当外设准备好了才传送;若未准备好,则
5、CPU就等待。,CPU与I/O设备之间的数据传送方式,CPU与I/O设备之间的数据传送方式,查询部分的程序如下:POLL:IN AL,STATUS_PORT ;从状态端口输入状态信息TEST AL,80H ;检查READY是否1JE POLL ;未READY,循环IN AL,DATA_PORT ;READY,从数据端口输入数据,查询式输出数据输出过程与输入过程大同小异。CPU首先通过状态口读取状态信息,据此判断输出设备是否就绪,若未就绪,“忙”触发器仍为“1”,CPU循环等待、查询;当输出设备准备就绪即不忙时,CPU便发出一个信号,使忙触发器。,CPU与I/O设备之间的数据传送方式,置“0”。
6、CPU一旦查询得知输出设备不忙,即执行输出指令,CPU与I/O设备之间的数据传送方式,CPU与I/O设备之间的数据传送方式,查询部分的程序为: POLL:IN AL,STATUS_PORT ;从状态端口输入状态信息TEST AL,80H ;检查BUSY位JNE POLL ;BUSY则循环等待MOV AL,STORE ;否则,从缓冲区取数据OUT DATA_PORT,AL ;从数据端口输出,CPU与I/O设备之间的数据传送方式,中断传送方式在这种控制方式中,I/O设备与CPU之间的数据传送是CPU通过响应I/O设备发出的中断请求来实现的。,CPU与I/O设备之间的数据传送方式,直接数据通道传送(
7、DMA)DMA控制方式下,I/O设备是和存储器直接交换信息的,不需CPU介入。外设与存储器间的数据传输是在硬件的作用下完成的,因此,可使传输速度大大提高。DMA控制器必须有以下功能:能向CPU发出HOLD信号。当CPU发出HLDA信号后,接管对总线的控制,进入DMA方式。发出地址信息,能对存储器寻址及能修改地址指针。能发出读或写等控制信号。能决定传送的字节数,及判断DMA传送是否结束。发出DMA结束信号,使CPU恢复正常工作状态。,CPU与I/O设备之间的数据传送方式,CPU与I/O设备之间的数据传送方式,DMA控制器8237A,为了高速传送大量数据,微型机中采用了直接存储器访问技术,简称DM
8、A(Direct Memory Access)。DMA方式在工作中不用软件指令而是用硬件控制在外设与存储器、存储器与存储器、外设与外设之间交换数据。在DMA工作期间,CPU不参与工作,DMA独占总线,此时,CPU让出地址总线,数据总线和一些控制总线,交由DMA控制电路控制,这个控制电路被称为DMA控制器。通常,DMA控制器占用总线有三种方式:CPU停机方式周期扩展周期窃取。,DMA控制器8237A,8237A是一个高性能的40个引脚双列直插式可编程DMA控制器,其主要功能有:在一片内有4个独立的DMA通道。每个通道的DMA请求可分别编程允许或禁止。每个通道的DMA请求有不同的中断优先级(即DM
9、A操作优先权)。 优先级有两种: 固定优先级 循环优先级可在外设与存储器,存储器与存储器之间传送数据,存储器地址寄存器可以加1或减1。可由软件编程改变DMA读写周期长度。,DMA控制器8237A,有四种工作方式: 单字节传送方式 数据块传送方式 请求传送方式 级连方式可以多片级连,扩展通道数。DMA操作结束有两种方法: 字节计数器减1由0变为FFFFH 外界通过输入负脉冲,强制DMA操作结束。DMA操作启动有两种方法: 外设输入DMA请求信号DREQ; 通过软件编程从内部启动。,DMA控制器8237A,8237A的内部结构,DMA控制器8237A,8237A内部包括3个基本组成部分:控制逻辑块
10、、缓冲器组和寄存器组。控制逻辑块这组控制逻辑包括三个部分: 时序和控制逻辑 优先权编码逻辑 命令控制逻辑时序和控制该逻辑模块接收外部时钟及片选和定时读写信号,用以产生内部的时序控制及对外的控制信号。,DMA控制器8237A,优先权编码该逻辑模块对同时提出DMA请求的通道进行优先级的排队判优。8237A有两种优先级编码,即固定优先级和循环优先级编码,可编程选择。 命令控制该逻辑模块在编程时对CPU送来的命令字或方式字进行译码,以确定DMA服务的类型。在不同的工作周期内有不同的操作。缓冲器组缓冲器组包括三个部分,它们分别提供以下地址和数据信号: A3A0:低4位地址线,双向三态信号。,DMA控制器
11、8237A,A7A4:高4位地扯线,三态,输出。 DB7DB0:8位数据线,双向。寄存器组8237A芯片内部共有12种寄存器,它们的名称和个数如下: 基地址寄存器 16位4 基字节数计数器 16位4 当前地址寄存器 16位4 当前字节数计数器 16位4 方式字寄存器 6位4 暂存地址寄存器 16位1 暂存字节数计数器 16位1 状态寄存器 8位1,DMA控制器8237A, 命令寄存器 8位1 暂存寄存器 8位1 屏蔽寄存器 4位1 请求寄存器 4位1当前地址寄存器每个通道都有一个16位的当前地址寄存器,它保存着DMA操作期间的动态地址值,也就是当前的地址值。当前字节数计数器每个通道都有一个16
12、位的当前字节数计数器,它保存着DMA操作期间的尚未传送的字节个数,也就是目前还需要传送的字节数。,DMA控制器8237A,基地址寄存器每个通道都有一个16位的基地址寄存器,它保存当前地址寄存器的初始值。基字节数计数器每个通道都有一个16位的基字节数计数器,它保存当前字节数计数器的初始值。方式字寄存器每个通道都有一个6位的方式字寄存器,它保存通道的方式控制字,该方式控制字规定了通道的各种操作方式,如工作方式、地扯增减选择、传送类型、自动初始化设置等。,DMA控制器8237A,暂存地址寄存器和暂存字节数计数器它们分别保存当前地址寄存器和当前字节数计数器的内容,用于8237A内部过程,用户不能直接使
13、用它们,它们也没有对应的端口地址。命令寄存器这是一个8位的寄存器,它保存通道的命令控制字。该命令控制字确定DMA请求与响应的有效电平状态、优先级方式、读写定时方式等。请求寄存器这是一个4位的寄存器,每一个通道对应一位,它保存利用软件编程设置的通道DMA请求状态,即软件DMA请求。请求寄存器只能写入,不能由CPU读出。,DMA控制器8237A,屏蔽寄存器这是一个4位的寄存器,每一个通道对应一位,它保存相应通道的对DMA请求信号DREQ的屏蔽状态,即允许与禁止。屏蔽寄存器只能写入,不能由CPU读出。状态寄存器这是一个8位的寄存器,它保存每个通道的DMA请求状态(DREQ状态)和TC或外部输入的状态
14、。暂存寄存器这是一个8位的寄存器,故亦称暂存字节寄存器,它不属于任何一个通道,它仅用于在存储器-存储器传送时暂存传输的数据。,DMA控制器8237A,8237A的引脚功能8237A DMA控制器有40个引脚,双列直插式封装。A3A0(Address,输入/输出):双向三态信号线。在空闲周期,它们是地址输入线,CPU用这四根地址线选择8237A内部不同的寄存器。A7A4(Address,输出):三态地址输出线,仅在DMA操作周期内使用。DB7DB0(Data Bus,输入/输出):双向三态数据总线,与系统数据总线相连。,DMA控制器8237A,CS(Chip Select,输入) 芯片选择信号,
15、低电平有效。当8237A在空闲周期内,其有效时,CPU可以通过数据线对8237A进行读写操作。可读写的寄存器端口地址由低4位地址线来选择,其对应的端口地址如表所示。,DMA控制器8237A,DMA控制器8237A,CLK(Clock,输入) 时钟信号,5MHz/3MHz。RESET(Reset,输入) 复位信号,高电平有效。当芯片被复位时,除了屏蔽寄存器被置位(4个通道均禁止DMA请求)外,其余寄存器均被清零。READY(Ready,输入) 就绪信号,高电平有效。当选用慢速存储器或I/O设备时,READY变为低电平。DREQ3DREQ0(DMA Request,输入) 外设发出的四个通道的DM
16、A服务请求信号,有效电平由编程决定。在固定优先级情况下,DREQ0优先级最高,依次减小,DREQ3优先级最低,但优先级可由编程改变。DACK3DACK0(DMA Acknowledge,输出) 8237A每个通逍的DMA响应信号,有效电平由编程决定。,DMA控制器8237A,HRO(Hold Request,输出) 总线请求信号,高电平有效。HLDA(Hold Acknowledge,输入) 总线响应信号,高电平有效。IOR (I/0 Read,输入/输出)I/O读,双向,三态,低电平有效。IOW (I/O Write,输入/输出)I/O写,双向,三态,低电平有效。MEMR(Memory Re
17、ad,输出) 存储器读信号,三态,低电平有效。只用于DMA传送。MEMW(Memory Write,输出) 存储器写信号,三态,低电平有效。只用于DMA传送。AEN(Address Enable,输出) 地址允许信号,高电平有效。,DMA控制器8237A,ADSTB(Address Strobe,输出) 地址选通信号,高电平有效。EOP (End of Process,输入/输出) 过程结束信号,双向,低电平有效。8237A的工作方式本节从DMA操作过程的角度,介绍DMA控制器8237A的几种工作方式,包括主从模态、传送方式、传送类型、优先级编码、工作周期、读写时序、自动初始化方式、存储器到存
18、储器的传送等。,DMA控制器8237A,主从模态DMA控制器既可以作为I/O端口接受CPU的读写操作,也可以代替CPU占有总线,控制外设与存储器之间传送数据,它充分体现了DMA控制器的两大特性,即总线的主控性和总线的从属性,按这两大特性,它也就有两种工作模态:主态方式和从态方式。主态方式 在主态方式时,DMA控制器是总线的控制者,此时,它如同CPU一样,掌握总线的控制权,可对涉及的外设端口或存储器单元进行读写操作。从态方式 在从态方式时,CPU是总线的控制者,而DMA控制器不过是普通的一个外部设备,有若干个端口而已,它的地位同一般的I/O接口芯片是一样的。,DMA控制器8237A,传送方式82
19、37A通过编程,可选择4种传送方式,分别是单字节传送方式,数据块传送方式,请求传送方式和级连方式。单字节传送方式单字节传送方式时,一次只传送一个字节,然后释放总线。数据块传送方式数据块传送方式时,响应一次DMA请求,将完成设定的字节数的全部传送。,DMA控制器8237A,请求传送方式请求传送方式又称查询方式,类似数据块传送,但每传送一个字节后,检测DREQ状态,若无效则停止,若有效则继续DMA传送。在下述情况之一发生时,将停止传送:DREQ变为无效。字节数计数器减1由0变为FFFFH,产生TC信号。外界输入有效信号。级联方式这种方式允许连接一个以上的芯片来扩展DMA通道的个数。,DMA控制器8
20、237A,传送类型DMA读8237A输出有效的和信号,把存储器的数据读到I/O设备。 DMA写8237A输出有效的和信号,把I/O设备的数据写到存储器。 DMA校验这是一种伪传输,实际上是校验8237A芯片内部的读写功能。,DMA控制器8237A,优先级编码8237A芯片可设定为两种优先级编码:固定优先级和循环优先级。固定优先级中4个通道的优先级顺序是固定的,DREQ0最高,DREQ3最低。 循环优先级中4个通道的优先级顺序是可变的,但其变化仍有一定的规律。工作周期8237A有两类工作周期:空闲周期和操作周期。操作周期也叫有效周期。全部工作周期分为7种时钟状态(时钟周期):空闲,DMA控制器8
21、237A,状态SI、起始状态S0、传送状态S1、S2、S3、S4以及等待状态SW。空闲周期在没有DMA请求时,8237A就处于空闲周期,执行连续的空闲状态SI。在空闲周期内,每个SI状态都要进行两种检测:检测有无CS信号:以确定有无CPU对8237A的操作要求。检测有无DREQ信号:以确定是否有I/O设备送来有效的DMA请求。,DMA控制器8237A,操作周期8237A在空闲周期内检测出DMA请求DREQ有效后,便进入操作周期(有效周期)。操作周期有6种状态:S0起始状态、S1工作状态1、S2工作状态2、S3工作状态3、S4工作状态4、SW等待状态。读/写时序DMA控制器可在两种操作时序中任选
22、一种:正常时序和压缩时序。读写时序方式的实质是在控制读、写脉冲发出的时间与时钟信号CLK的对应关系。正常时序正常时序传送一个字节的数据包含4个时钟脉冲周期,即S1S4状态。,DMA控制器8237A,压缩时序压缩时序方式时所占用的脉冲数将减少。压缩时序操作把读命令的宽度压缩到等于写命令的宽度,省掉了S3,即由S4完成读和写的操作。在系统性能允许的范围内,压缩时序能获得较高的数据吞吐量。自动初始化方式通过对方式字寄存器的编程,可设置某个通道为自动初始化方式。自动初始化方式的功能是,当该通道完成一个数据传送并产生信号EOP时(可能是由内部的TC产生,也可能是外部产生),用基地址寄存器和基字节数计数器
23、的内容,使相应的当前地址寄存器和当前字节数计数器恢复初值。,DMA控制器8237A,存储器到存储器的传送利用这种方式,可以使数据块从一个存储空间传送到另一个存储空间,将程序的影响和传输时间减到最小。这种方式需要占用8237A的2个通道。由通道0的地址寄存器提供源地址,通道1的地址寄存器提供目的地址,通道1的字节数计数器编程为传送的字节数,传送由设置一个通道0的软件DREQ启动,8237A按正常方式向CPU发出HRQ,当CPU发出总线响应信号HLDA后,DMA传送即可开始。,DMA控制器8237A,8237A的编程8237A依靠它的可编程特性实现它的各种工作方式的选择和设定。8237A在HLDA
24、信号处于无效的任何时间里,即使HRQ有效,也可以接受CPU对它的编程。CPU对8237A的编程初始化工作是通过8237A的端口进行的。8237A的端口是用A3A2A1A0低4位地址线编址的,共有16个端口地址。假设我们以DMA代表16个端口地址的首地址,那么写通道2基字节数计数器的端口地址可表示为DMA05H,写方式寄存器的端口地址可表示为DMA0BH。16个端口地址分为两部分:,DMA控制器8237A,00H07H分配给4个通道的相应的16位寄存器,它们的端口地址分配如下:基和当前地址寄存器端口 基和当前字节数计数器端口通道0 DMA0 DMA1通道1 DMA2 DMA3通值2 DMA4 D
25、MA5通道3 DMA6 DMA708H0FH分配给其他寄存器,其中包括3条不使用数据总线而只利用端口地址进行操作的清除命令。8237A的初始化编程命令字总共有8条,其中控制命令有5个:方式字、命令字、请求字、屏蔽字、状态字;,DMA控制器8237A,清除命令有3个:清除字节指针触发器、主清除命令、清除屏蔽寄存器。控制命令字方式字写入端口地址0BH,其主要功能是:选择传送方式和传送类型,设置自动初始化方式和地址增量方向。命令字写入端口地址08H,其主要功能是:选择DREQ、DACK有效极性,读写时序,优先级编码方式等。请求字写入端口地址09H,其主要功能是:发生软件DMA请求。,DMA控制器82
26、37A,屏蔽字写入端口地址0AH或0FH,其主要功能是:允许或禁止通道的DMA请求。状态字从端口地址08H读出,其主要功能是:反映通道DMA请求状态和是否有TC信号。,DMA控制器8237A,DMA控制器8237A,DMA控制器8237A,清除命令清除命令有3条。这三条命令与数值无关,不需通过数据总线,即执行输出指令时,AL的内容可随便设置,只要对特定的端口地址执行一次写操作,依靠这地址和控制信号,命令就生效。这就是所谓的“软命令”。 清除字节指针命令(写入端口地址0CH)即清除高/低触发器命令,或叫清除先/后触发器命令,是专为16位寄存器的读写而设置的。清除字节指针命令使字节指针(先/后触发
27、器)被清“0”。,DMA控制器8237A,主清除命令(写入端口地址0DH)此命令与硬件的RESET信号功能相同,是软件复位命令,除使屏蔽寄存器各位置1外,其它各寄存器均被清0,使8237A进入空闲状态,准备接收CPU对它的初始化编程,此时B237A处于从态方式。 清除屏蔽寄存器命令(写入端口地址0EH)其功能是将4个通道的屏蔽位清除,允许它们接受DMA请求。该命令是对屏蔽寄存器操作的第三个命令。,DMA控制器8237A,8237A的编程步骤CPU发主清除命令(复位);写入基地址及当前地址值;写入基字节数和当前字节数初值;写入方式字;写入屏蔽字;写入命令字;写入请求字,可用软件DMA请求启动通道
28、,也可在(1)(6)完成以后,等待外部DREQ请求信号。在编程中应注意以下几点。16位寄存器的读写顺序:先低后高。保证编程和HLDA是互相排斥的。,DMA控制器8237A,【例6-1】8237A数据块传送设在某8088系统中,用8237A通道1将内存1000H单元开始的24K字节数据转存到软盘之中(暂不考虑20位地址的问题,可认为1000H就是基地址的初值)。采用数据块方式传送,地址增量方式,只传送一遍,设DREQ和DACK低电平有效,当A15A4=000000000111时选中8237A,要求设计8237A通道1的初始化程序。端口地址A3A0由8237A芯片内部译码,编码范围是从0000到1
29、111,再与A15A4组合,则端口地址范围是0070H007FH。,DMA控制器8237A,传送字节数24K字节对应16进制数为6000H,但写入通道字节数计数器的值应为6000H - 1=5FFFH,因为TC的产生不是在计数器由1到O的跳变处,而是在计数器由0到FFFFH的跳变处。所以写入的计数初值应比实际字节数少一个。方式字按题目要求,控制字的组合为: 1000 1001B一位屏蔽字按题目要求,一位屏蔽字的组合为: 0000 0001B命令字按题目要求,命令字的组合为: 0100 0000B,DMA控制器8237A,初始化程序START:MOV DX, 007DH ;发主清除命令OUT D
30、X, ALMOV DX, 0072HMOV AL, 00HOUT DX, AL ;送基址和当前地扯低8位MOV AL, 10HOUT DX, AL ;送基地址和当前地址高8位MOV DX, 0073HMOV AL, 0FFH ;送基值和当前计数值低8位0UT DX, ALMOV AL, 5FH ;送基值和当前计数值高8位,DMA控制器8237A,0UT DX, ALMOV DX, 007BHMOV AL, 89H ;写入方式控制字OUT DX, AL ;DMA读传送MOV DX, 007AHMOV AL, 01H ;写入屏蔽字0UT DX, ALMOV DX, 0078HMOV AL, 40H ;写入命令控制字OUT DX, AL,The end,