1第8章DMA控制器2一、输入输出控制方式•CPU对I/O控制方式,就微机系统而言有四种基本方式–程序查询方式:CPU通过查询I/O设备的状态,断定哪个设备需要服务,然后转入相应的服务程序。–程序中断方式:当I/O设备需要CPU为其服务时,可以发生中断请求信号INTR,CPU接到请求信号后,中断正在执行的程序,转去为该设备服务,服务完毕,返回原来被中断的程序并继续执行。–直接存储器存取(DMA)方式:采用这种方式时,在DMA控制器的管理下,I/O设备和存储器直接交换信息,而不需要CPU介入。–I/O处理机方式:引入I/O处理机,全部的输入/输出操作由I/O处理机独立地承担。•前两种主要由程序来实现,后两种主要由附加硬件来实现,微机中多数采用前三种。31程序查询方式•程序查询方式中,CPU对I/O设备的控制全部由程序来实现,所有的输入输出操作都处于正在被执行的程序的控制下,I/O设备完全处于被动地位。–无条件传送方式–查询传送方式•所谓查询,就是询问外部设备的工作状态,通过这一状态来判定外设是否已具备了与CPU交换数据的条件,即外设是否已准备好与CPU交换数据。–对输入设备而言,这个状态指示输入设备的数据是否已经准备就绪,CPU是否可以随时来读取这个数据。–对输出设备而言,这个状态指示输出设备的数据接收寄存器是否已空,是否可以随时接受CPU送来的数据。42程序中断方式•无条件传送方式和查询传送方式的缺点是CPU和外设只能串行工作,各外设之间也只能串行工作。•为了使CPU和外设以及外设和外设之间能并行工作,提高系统的工作效率,充分发挥CPU高速运算的能力,在微机系统中引入了中断技术,利用中断来实现CPU与外设之间的数据传送,这就是程序中断传送方式。•在程序中断传送方式中,通常是在主程序中某一时刻安排启动某一台外设的指令,然后CPU继续执行其主程序,当外设完成数据传送的准备后,向CPU发出“中断请求”信号,在CPU可以响应中断的条件下,中断(即暂停)现行主程序的执行,而转去执行“中断服务程序”,在“中断服务程序”中完成一次CPU与外设之间的数据传送,传送完成后仍返回被中断的断点处继续执行主程序。53DMA方式•DMA传送方式的提出•与程序查询方式相比,利用中断方式进行数据传送可以大大提高CPU的工作效率。•中断方式局限性,传输效率仍然不是很高–仍然通过CPU执行程序来实现数据传送的–每次传送触发中断服务程序,保护和恢复断点、中断程序调用–按字节或字来进行传输,不能实现按块传输•如果I/O设备的数据传输率较高,那么CPU和这样的外部设备进行数据传输时,即使尽量压缩程序查询方式和中断方式中的非数据传输时间,也仍然不能满足要求。•为了解决上述问题,实现按数据块传输,就需要改变传输方式,为此,提出了在外设和内存之间直接传送数据的方式,这就是直接存储器传输方式,即DMA方式。6DMA控制器的功能•(1)当外设准备就绪,希望进行DMA操作时,会向DMA控制器发出DMA请求信号,DMA控制器接到此信号后,应能向CPU发总线请求信号。•(2)CPU接到总线请求信号后,如果允许,则会发出DMA响应信号,从而CPU放弃对总线的控制,这时DMA控制器应能实行对总线的控制。•(3)DMA控制器得到总线控制权以后,要往地址总线发送地址信号,修改所用的存储器的地址指针。•(4)在DMA传送期间,DMA控制器应能发存储器或接口的读/写控制信号。•(5)能统计传送的字节数,并且判断DMA传送是否结束。•(6)能向CPU发出DMA结束信号,将总线控制权交还给CPU。7DMA传送的一般工作过程84I/O处理机方式•I/O处理机–为了提高整个系统的工作效率,使CPU完全摆脱管理、控制输入/输出的沉重负担。–如Intel8089就是一种专门配合8086/8088使用的I/O处理器芯片。•I/O处理机功能–有自己的指令系统,也能独立地执行程序,能承担原来由CPU处理的全部输入/输出操作。•如对外设进行控制、对输入/输出过程进行管理,并能完成字与字之间的装配和拆卸、码制的转换、数据块的错误检测和纠错,以及格式变换等操作。–同时它还可以向CPU报告外设和外设控制器的状态,对状态进行分析,并对输入/输出系统出现的各种情况进行处理。–I/O处理机同CPU程序并行执行。9二、DMA控制器8237A•主要的功能有:1.在一片8237A内有4个独立的DMA通道。2.每个通道的DMA请求可分别编程允许或禁止。3.每个通道的DMA请求有不同的中断优先级(即DMA操作优先权),优先级有两种:固定优先级和循环优先级,由编程决定。固定优先级的顺序是通道0最高,依次是通道1,通道2和通道3。4.可在外设与存储器,存储器与存储器之间传送数据,存储器地址寄存器可以加1或减1。5.可由软件编程改变DMA读写周期长度。6.有四种工作方式:单字节传送方式,数据块传送方式,请求传送方式,级连方式。7.可以多片级连,扩展通道数。8.DMA操作结束有两种方法:一是字节计数器减1由0变为FFFFH,二是外界通过输入负脉冲,强制DMA操作结束。9.DMA操作启动有两种方法:一是外设输入DMA请求信号DREQ,二是通过软件编程从内部启动。108237A的内部结构及引脚功能11128237A内部端口地址分配138237A芯片内部共有12种寄存器•1)基地址寄存器16位×4•2)基字节数计数器16位×4•3)当前地址寄存器16位×4•4)当前字节数计数器16位×4•5)方式字寄存器6位×4•6)暂存地址寄存器16位×1•7)暂存字节数计数器16位×1•8)状态寄存器8位×1•9)命令寄存器8位×1•10)暂存寄存器8位×1•11)屏蔽寄存器4位×1•12)请求寄存器4位×1148237A的工作方式•从DMA操作过程的角度,DMA控制器8237A的几种工作方式:–主从模态–传送方式–传送类型–优先级编码–自动初始化方式–存储器到存储器的传送等。151.主从模态•DMA控制器既可以作为I/O端口接受CPU的读写操作,也可以代替CPU占有总线,控制外设与存储器之间传送数据,它充分体现了DMA控制器的两大特性,即总线的主控性和总线的从属性。•按这两大特性,它也就有两种工作模态:–主态方式–从态方式16(1)主态方式•在主态方式时,DMA控制器是总线的控制者,它如同CPU一样,掌握总线的控制权,可对涉及的外设端口或存储器单元进行读写操作。•在DMA操作时,DMA控制器成为系统的控制核心,为完成DMA操作,它应提供存储器地址,指定外设,发出读写控制信号。–地址总线:存储器地址–DACK信号:外设选通–IOR、IOW、MEMR、MEMW•DMA操作在外设和存储器之间建立了直接数据通道,数据传送时不需要经过DMA控制器,加快了数据传送速度,减少了中间环节,这也是DMA方式能高速传送的原因之一。17(2)从态方式•在从态方式时,CPU是总线的控制者,而DMA控制器不过是普通的一个外部设备,有若干个端口而已,它的地位同一般的I/O接口芯片是一样的。•DMA控制器在开始工作之前,要由CPU写入初始化控制字,建立DMA控制器工作的基本条件:–如传送方式、传送类型、地址增加还是减少、是否设置自动初始化方式等–CPU还要写入一些数据,以确定DMA方式传送的具体内容,如存储区地址、传送字节数等•在这些操作中,DMA控制器以被规定的端口地址接收数据。另外,在DMA传送后,CPU也往往读取DMA控制器的状态。在这两种情况下,DMA控制器是系统的从属设备。182.传送方式•8237A通过编程,可选择4种传送方式:–单字节传送方式–数据块传送方式–请求传送方式–级联传送方式19(1)单字节传送方式•单字节传送方式时,一次只传送一个字节,然后释放总线。若又有外设DMA请求,8237A再向CPU发下一次总线请求HRQ,获得总线控制权后,再传送下一个字节数据。•在这种传送方式中应注意以下几方面:–1)在DACK有效之前,DREQ应保持有效。–2)即使DREQ在传送过程中一直保持有效,在总线响应后HRQ也将变成无效,并在传送一个字节后DMA控制器释放总线,但由于DREQ一直有效,HRQ很快再次变成有效,在芯片接受到新的HLDA后,下一个字节又开始传输。–3)每次传送后,当前字节数计数器减1,当前地址寄存器减1或加1,当当前字节数计数器减1由0变成FFFFH时,发出有效信号(产生终止计数TC信号),如果通道编程设为自动初始化方式,则自动地重新装入计数值和地址寄存器。20(2)数据块传送方式•数据块传送方式时,响应一次DMA请求,将完成设定的字节数的全部传送。当字节数计数器减l由0变为FFFFH时,产生TC有效信号,使8237A将总线控制权交还给CPU从而结束DMA操作方式,外部有效的信号也可以终结DMA传送。•在DACK变成有效之前,DREQ信号必须保持有效。一旦DACK有效,不管DREQ如何,8237A一直不放弃总线控制权。即便是在传送过程中,DREQ变为无效,8237A也不会释放总线,只是暂停数据的传送,等到通道请求信号再次有效后,8237A又继续进行数据传送,直到整块数据全部传完,才会退出DMA操作,将总线控制权交还CPU。21(3)请求传送方式•请求传送方式又称查询方式,类似数据块传送,但每传送一个字节后,检测DREQ状态,若无效则停止,若有效则继续DMA传送。在下述情况之一发生时,将停止传送:–1)DREQ变为无效。–2)字节数计数器减1由0变为FFFFH,产生TC信号。–3)外界输入有效信号。•当DREQ无效时,8237A停止传送,内部的当前地址寄存器和当前字节数计数器还保留当时的数值,一旦外设准备好要传送的新数据,可以再次使DREQ变为有效,就可以使传送继续下去。当DREQ无效时,8237A停止传送,此时释放总线,当DREQ重新有效时,将重新开始一次DMA请求过程。22(4)级连方式•这种方式允许连接一个以上的芯片来扩展DMA通道的个数。•连接方法–将扩展的DMA芯片的HRQ和HLDA分别连到主片的某个通道的DREQ和DACK•当主片接到扩展芯片的DMA请求并响应后,它仅发出DACK应答,其它的地址信号与控制信号一律禁止,由扩展芯片控制DMA传送。这种情况下,主片的连接通道只起两个作用:–一是优先级连接的作用,即将从片的4个DMA通道纳入到主片的优先级管理机制–二是向CPU输出HRQ和传递HLDA。233.传送类型•DMA可以对每个通道的方式字寄存器进行设置,采用DMA读、DMA写、DMA校验等三种不同的传送类型。•(1)DMA读–8237A输出有效的MEMR和IOW信号,把存储器的数据读到I/O设备。•(2)DMA写–8237A输出有效的MEMW和IOR信号,把I/O设备的数据写到存储器。•(3)DMA校验–伪传输,校验8237A芯片内部的读写功能。–8237A芯片的操作如同DMA读和DMA写一样,产生地址信号以及对EOP响应等,但对存储器和I/O设备的控制线(MEMR、MEMW、IOW、IOR)均处于无效状态,禁止实际传送。–DMA校验传输功能是器件测试时才使用的,一般的使用者对这项功能并不感兴趣。244.优先级编码•8237A芯片可设定为两种优先级编码:–固定优先级–循环优先级•固定优先级–4个通道的优先级顺序是固定的,DREQ0最高,DREQ3最低。•循环优先级–4个通道的优先级顺序是可变的,当某一个通道申请DMA请求并被响应服务后,它就被指定为最低优先级,它的下一级就成为最高优先级。•无论在任何情况下,DMA请求禁止嵌套服务。当一个通道的DMA请求被响应并服务后,其它3个通道的DMA请求将都被禁止,无论它们的优先级是高还是低。优先权排队只在DMA响应之前有效,DMA响应之后则无效。255.自动初始化方式•通过对方式字寄存器的编程,可设置某个通道为自动初始化方式。•自动初始化方式–当该通道完成一个数据传送并产生信号时(可能是由内部的TC产生,也可能是外部产生)•当前地址寄存器=基地址寄存器•当前字节数计数器=基字节数计数器–当前地址