第6章直接存储器存取DMA_第1页
第6章直接存储器存取DMA_第2页
第6章直接存储器存取DMA_第3页
第6章直接存储器存取DMA_第4页
第6章直接存储器存取DMA_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第六章直接存储器存取DMA,6.1DMA的工作原理及工作过程6.2DMA控制器及8237DMA控制器6.38237A的初始化编程6.4DMA的应用举例,6.1.1DMA的传送原理DMA方式用硬件实现存储器与存储器之间或存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。DMA传送包括:RAMI/O端口的DMA读传送;I/O端口RAM的DMA写传送;RAMRAM的存储单元传送。,6.1DMA的工作原理及工作过程,DMA传送的基本特点是不经过CPU,不破坏CPU内各寄存器的内容,直接实现存储器与I/O设备之间的数据传送。在IBMPC系统中,以DMA方式传送一

2、个字节的时间通常是1个总线周期,即5个时钟周期。CPU内部的指令操作只是暂停这个总线周期,然后继续操作,指令的操作次序不会被破坏。所以DMA传送的方式特别适合用于外部设备与存储器之间高速成批的数据传送。图6-1是实现DMA传送的基本原理图,图中以系统总线为界,左侧位于主机板内,其中有DMA控制器;右侧有存储器(部分存储器在主机板内)、外设和外设接口,它们通过I/O插槽与系统总线相接。,图6-1DMA传送的基本原理图,6.1.2DMA的工作过程,图6-2DMA的传送过程,从图中可以看出,系统总线分别受到CPU和DMAC这两个器件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息,DMAC

3、也可以向地址总线、数据总线和控制总线发送信息。但是,在同一时间,系统总线只能受一个器件控制。当CPU控制总线时,DMAC必须与总线脱离;而当DMAC控制总线时,CPU必须与总线脱离。因此,CPU与DMAC之间必须有联络信号。,1.DMA的传送过程DMA传送的工作过程如下:(1)I/O端口向DMA控制器发出DMA请求,请求数据传送。(2)DMA控制器在接到I/O端口的DMA请求后,向CPU发出总线请求信号,请求CPU脱离系统总线。(3)CPU在执行完当前指令的当前总线周期后,向DMA控制器发出总线响应信号。(4)CPU随即和系统的控制总线、地址总线及数据总线脱离关系,处于等待状态,由DMA控制器

4、接管这3个总线的控制权。,(5)DMA控制器向I/O端口发出DMA响应信号。(6)DMA控制器把进行DMA传送涉及到的RAM地址送到地址总线上。如果进行I/O端口RAM传送,DMAC向I/O端口发出I/O读命令,向RAM发出存储器写命令;如果进行RAMI/O端口传送,DMAC向RAM发出存储器读命令,向I/O端口发出I/O写命令,从而完成一个字节的传送。(7)当设定的字节数传送完毕,DMA传输过程结束后,也可以由来自外部的终止信号迫使传输过程结束。当DMA传送结束后,DMA控制器就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将总线响应信号变成无效,于是,CPU

5、重新控制三总线,继续执行被中断的当前指令的其他总线周期。,2.DMA的传送方式DMA用硬件在外设与内存之间直接进行数据交换。通常系统的数据和地址总线以及一些控制信号线(如IO/、RD、WR等)是由CPU管理的,在DMA方式下,就要求CPU让出总线(也就是将这些总线置为高阻状态),而由DMA控制器(DMAC)接管总线。通常,大部分DMA都有三种DMA传送方式。(1)单字节传送方式。每次DMA传送只传送一个字节的数据,传送后释放总线,CPU至少控制一个完整的总线周期,然后测试DMA请求线DREQ,若有效,再进入DMA周期。,在这种方式中要注意:DMA响应信号DACK有效前,DREQ必须保持有效。若

6、DREQ在传送过程中一直保持有效,则在两次传送之间必须释放总线。(2)成组传送方式。一个DMA请求可以传送一组信息。在DMAC初始化时,由编程决定这一组信息的字节数,只要在DACK有效之前DREQ保持有效即可。一旦DACK有效,不管DREQ是否有效,DMAC一直不放弃总线控制权,直到整个数组传送完。(3)请求传送方式。请求传送方式又称查询传送方式。该方式的传送类似成组传送方式,但每传送一个字节后,DMAC就检测DREQ:若无效,则挂起;若有效,则继续DMA传送,直到外加信号强制DMAC中止操作。,3.DMA的特点DMA具有下列特点:(1)它使主存既可被CPU访问,又可被外设直接访问。(2)当传

7、送数据块时,主存地址的确定、传送数据的计数控制等都用硬件电路直接实现。(3)主存中要开设专用缓冲区,及时供给和接收外设的数据。(4)DMA传送速度快,可使CPU和外设并行工作,提高了系统的效率。(5)DMA在开始前和结束后要通过程序和中断方式进行预处理和后处理。,6.2DMA控制器及8237DMA控制器,6.2.18237A的外部引脚8237A是微机系统中实现DMA功能的大规模集成电路控制器。PC/XT使用一片8237A,PC/AT使用两片8237A,在高档微机中常使用多功能芯片取代8237A,但多功能芯片中的DMA控制器与8237A的功能基本相同。,1.8237A的内部结构和引脚功能8237

8、A是具有4个独立DMA通道的可编程DMA控制器(DMAC),它使用单一的+5V电源、单相时钟和40引脚双列直插式封装。在实际应用中,8237A必须与一片8位锁存器一起使用,才能形成一个完整的4通道DMA控制器。8237A经初始化后,可以控制每一个通道在存储器和I/O口之间以最高1.6M波特的速率传送最多达64KB的数据块,而不需要CPU的介入。,8237A的基本功能如下:(1)一个芯片中有4个独立的DMA通道。(2)每一个通道的DMA请求都可以被允许或禁止。(3)每个通道的DMA请求有不同的优先级,既可以是固定优先级,也可以是循环优先级。(4)每个通道一次传送的最大字节数为64KB。(5)82

9、37A提供4种传送方式:单字节传送方式、数据传送方式、请求传送方式和级联传送方式。,图6-38237A内部结构,(1)DMA通道。8237A内部包含4个独立通道,每个通道包含2个16位的地址寄存器、2个16位的字节数寄存器、2个16位的方式寄存器、1个DMA请求触发器和1个DMA屏蔽触发器。此外,4个通道共用1个8位控制器、1个8位状态寄存器、1个8位暂存器、1个8位屏蔽寄存器和1个8位请求寄存器。,(3)控制逻辑。在DMA周期内,控制逻辑通过产生相应的控制信号和16位要存取的内存单元地址来控制DMA的操作步骤。初始化时,通过对方式寄存器进行编程,使控制逻辑可以对各个通道的操作进行控制。,图6

10、-48237A引脚图,RESET:复位输入端,高电平有效。当RESET有效时,屏蔽寄存器被置1(4个通道均禁止DMA请求),其他寄存器均清0,8237A处于空闲周期,所有控制线都处于高阻状态,并禁止4个通道的DMA操作。复位后必须重新初始化;否则8237A不能进入DMA操作。READY:“准备就绪”信号输入端,高电平有效。当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期。当传输完成时,READY端变为高电平,以表示存储器或I/O设备准备就绪。,DACK0DACK3:DMA对各个通道请求的响应信号,输

11、出的有效电平可由编程设定。8237A接收到通道请求后,向CPU发出DMA请求信号HRQ,当8237A获得CPU送来的总线允许信号HLDA后,便产生DACK信号,送到相应的I/O端口,表示DMA控制器响应外设的DMA请求,从而进入DMA服务过程。HRQ:8237A输出给CPU的总线请求信号,高电平有效。当外设的I/O端口要求DMA传送时,向DMA控制器发送DREQ信号,如果相应的通道屏蔽位为0,即DMA请求未被屏蔽,则DMA控制器的HRQ端输出为有效电平,从而向CPU发出总线请求。,HLDA:总线响应信号,高电平有效,是CPU对HRQ信号的应答信号。当CPU接收到HRQ信号后,在当前总线周期结束

12、之后让出总线,并使HLDA信号有效。A3A0:地址总线低4位,双向。当CPU控制总线时,它们是地址输入线。CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程。当8237A控制总线时,由这4条线输出要访问的存储单元的最低4位地址。A7A4:地址线,输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位。,DB7DB0:8位双向数据线,与系统数据总线相连。在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7DB0,以了解8237A的工作情况。也可以通过I/O写命令对DMA控制器的内部寄存器进行编程。在DMA控制

13、器控制总线时,DB7DB0输出要访问的存储单元的高8位地址(A15A8),并通过ADSTB锁存到外部地址锁存器中,和A7A0输出的低8位地址一起构成16位地址。,8237A仅支持64KB寻址,为了访问超过64KB范围的其他地址空间,系统中增设了页面寄存器。在PC/XT微机系统中,每一通道的页面寄存器是4位寄存器。当一个DMA操作周期开始时,相应的页面寄存器内容就放到系统地址总线A19A16上,和8237A送出的16位低地址一起,构成20位物理地址。,6.2.28237A的工作方式DMA控制器8237A依靠它的可编程特性可以实现对多种DMA传送方式的控制。用程序的方法置入控制字(或称命令字)可以

14、设置和改变DMA传送方式。置入控制寄存器的控制字控制着与整个DMA控制器有关的工作方式。置入各通道内方式寄存器的控制器的控制字控制着本通道的工作方式。8237A在DMA传送时有4种工作方式。,1单字节传送方式单字节传送方式是编程为一次只传送一个字节,数据传送后字节计数器减量,地址要相应修改(增量或减量取决于编程),HRQ变为无效,释放系统总线。若传送使字节数减为零,TC产生或者终结DMA传送,或重新初始化。在这种方式下,DREQ信号必须保持有效,直至DACK信号变为有效,但是若DREQ有效的时间覆盖了单字节传送所需要的时间,则8237A在传送完成一个字节后,先释放总线,然后再产生下一个DREQ

15、,完成下一个字节的传送。在8080/8086系统中,这样的方法在两次DMA传送之间,CPU至少执行一个机器周期。,2成组传送方式在成组传送方式下,8237ADREQ启动后,开始连续地传送数据,直至字节计数器减到零,产生TC,或者由外部输入有效的EOP信号来终结DMA传送。在这种方式下,DREQ信号需要维持到数据块传送完成或终结操作。,4级联方式级联方式用于通过级联以扩展通道。第二级的HRQ和HLDA信号连到第一级的DREQ和DACK上,如图6-5所示。第二级各个片子的优先权等级与所连的通道相对应。在这种工作情况下,第一级只起优先权网络的作用,除了由某一个二级的请求向CPU输出HRQ信号外,并不

16、输出任何其他信号,实际的操作是由第二级的片子完成的,若有需要,还可以由第二级扩展到第三级等等。,6.2.38237A的内部寄存器,表6-18237A内部寄存器,1.控制寄存器,图6-6控制寄存器格式,(1)D0:规定8237A是否工作在存储器传送方式。8237A约定:当进行存储器之间的数据传送时,由通道0提供源地址,通道1提供目的地址并进行字节计数。每传送一个字节需要两个总线周期,第1个总线周期先将源地址单元的数据读入8237A的暂存器,第2个总线周期再将暂存器的内容放到数据总线上,然后在写信号的控制下,写入目的地址单元。,(2)D1:在存储器向存储器传送时,起控制作用。(3)D2:用来启动和

17、停止8237A的工作。(4)D3:8237A可以有两种工作时序,一种是正常时序,一种是压缩时序。如果系统各部分速度比较高,便可以工作于压缩时序,这样可以提高DMA数据的传输速率。,(5)D4:选择各通道DMA请求的优先级。当D4=0时为固定优先级,即通道0优先级最高,通道3的优先级最低;当D41时为循环优先级,即在每次DMA服务之后,各个通道的优先级都发生变化。比如,某次传输前的优先级次序为2301,那么在通道2进行一次传输之后,优先级次序成为3012。如果这时通道3没有DMA请求,而通道0有DMA请求,那么,在通道0完成DMA传输后,优先级次序成为1230。DMA的优先级排列顺序只是用来决定

18、同时请求DMA服务的通道的响应次序,而任何一个通道一旦进入DMA服务后,其他通道必须等到该通道的服务结束后,才可以进行DMA服务。,2.方式寄存器8237A的每个通道都有一个方式寄存器,4个通道的方式寄存器共用一个端口地址,方式选择命令的格式如图6-7所示。方式字的最低两位进行通道选择,写入命令字之后,8237A将根据D1和D0的编码把方式寄存器的D7D2位送到相应通道的方式寄存器中,从而确定该通道的传送方式和数据传送类型。8237A各通道的方式寄存器是6位的,CPU不可寻址。,图6-7方式寄存器格式,(1)DMA传送方式。8237A提供4种传送方式,每个通道可以用其中之一进行工作。单字节传送

19、方式。每次DMA操作只传送一个字节的数据,然后自动地把总线控制权交给CPU,让CPU占用至少一个总线周期。若又有DMA请求信号,8237A重新向CPU发出总线请求,等获得总线控制权后,再传送下一个字节数据。数据块传送方式。进入DMA操作后,连续传送数据直到整个数据块全部传送完毕。,请求传送方式。该方式与数据块传送方式类似,只是在每传送一个字节后,8237A都对DMA请求信号DREQ进行测试。若检测到端变为无效电平,则马上暂停传输,但测试过程仍然进行,当DREQ又变为有效电平时,就在原来的基础上继续进行传输,直到传送结束。级联传输方式。为了实现DMA系统扩展,几个8237A可以进行级联。,(2)

20、DMA数据传送的类型。方式选择命令字的D3位和D2位确定数据传送的类型,即写传送、读传送和校验传送。写传送是将数据从I/O端口读出并写入存储单元。读传送是将数据从存储单元读出并写入I/O端口。校验传送是一种虚拟传送,8237A本身并不进行数据传送,而只是像DMA读传送或DMA写传送那样产生时序和地址信号,但存储器和I/O端口的读/写控制信号无效。校验传送一般在器件测试时使用。当D4位为1时,通道有“自动重装功能”。D5位控制“当前地址寄存器”的工作方式,规定地址是增量修改还是减量修改。,3.地址寄存器每个通道有一个16位的基地址寄存器和一个16位的当前地址寄存器。基地址寄存器存放本通道DMA传

21、输时所涉及到的存储区首地址或末地址,这个初始值是在初始化编程时写入的,同时也被写入当前地址寄存器。当进行DMA传送时,由当前地址寄存器向地址总线提供本次DMA传送时的内存地址(低16位)。当前地址寄存器的值在每次DMA传输后自动加1或减1,为传送下一个字节作好准备。在整个DMA传送期间,基地址寄存器的内容保持不变。当通道初始化选择“自动重装”功能时,一旦全部字节传送完毕,基地址寄存器的内容自动重新装入当前地址寄存器。,5.状态寄存器状态寄存器的格式如图6-8所示。状态寄存器的高4位表示当前4个通道是否有DMA请求,低4位指出4个通道的DMA传送是否结束,供CPU查询。它与控制器共用一个端口地址

22、。,图6-8状态寄存器的格式,6.请求寄存器和屏蔽寄存器,请求寄存器和屏蔽寄存器是4个通道公用的寄存器,使用时应写入请求命令和屏蔽命令字,其格式如图6-9所示。8237A根据请求寄存器的D2D0位,将相应通道的请求触发器置“1”,使用通道提出“软件DMA请求”。8237A根据屏蔽寄存器的D2D0位,将相应通道的屏蔽触发器置“1”(或清“0”)。当一个通道的屏蔽触发器置1后,它将屏蔽来自引脚DREQ的硬件DMA请求,同时,也屏蔽来自请求寄存器的软件DMA请求。因此,在对通道初始化之前,应使屏蔽触发器置“1”,而在初始化之后,应使屏蔽触发器清“0”。,图6-9请求寄存器和屏蔽寄存器,7.多通道屏蔽

23、寄存器8237A允许使用一个屏蔽字一次完成对4个通道的屏蔽置,格式如图6-10所示。其中,D0D3对应于通道03的屏蔽触发器,若某一位为1,则对应通道的屏蔽触发器置1。,图6-10多通道屏蔽寄存器,8.先/后触发器8237A只有8根数据线,而基地址寄存器和基本字节寄存器都是16位,在预置初值时需要分两次进行,每次写入一个字节。先/后触发器是为初值的写入顺序而设置的,在使用先/后触发器时,先将其清“0”,然后按先低位,后高位的顺序写字节。,9.暂存寄存器暂存寄存器为4通道共用的8位寄存器。在DMA控制器实现存储器到存储器的传送方式时,它暂存中间数据,CPU可以读取暂存寄存器中的内容,其值为最后一

24、次传送的数据。,6.38237A的初始化编程,6.3.18237A的寻址及连接8237A内部共占用16个I/O端口地址,由地址码的A3A0控制,恰好对应00001111的16种组合。表6-2给出了端口地址的分配关系。,需要说明以下两点:(1)地址0H7H(00000111)分配给4个通道的地址初值寄存器和地址计数器、字节数值寄存器和字节计数器。每个寄存器都是16位,无论是写入还是读出都需要两次。内部逻辑中有个字节指向触发器F接成计数方式工作。若F触发器为0,则读、写时指向低位字节;若F为1,则读、写时指向高位字节。每次读、写后F改变状态。表6-2还指出,对地址0CH(1100)执行输出指令(A

25、L寄存器可为任意值),将使F触发器初始化为0。,(2)16个I/O端口地址中,除分配给内部编址寄存器的外,还有几个用于形成软件命令。这些命令是:对8237A总清等效于外接RESET信号,占用地址1101;对请求寄存器清零,占用地址1110;还有已经提到的对字节指向触发器F的清零。这3种命令都是用输出指令实施的。指令中AL寄存器的内容不起作用,可为任意值。,6.3.28237A的初始化8237A的初始化编程:(1)命令字写入控制寄存器。在初始化时必须设置寄存器,以确定其工作时序、优先级方式、DREQ和DACK的有效电平及是否允许工作等。在PC系列机中,当BIOS初始化时,已将通道的控制寄存器设定

26、为00H,禁止存储器到存储器的传送,允许读、写传送,正常时序,固定优先级,不扩展写信号,DREQ高电平有效,DACK低电平有效。因此在PC微机系统中,如果借用DMACH1进行DMA传送,则在初始化编程时,不应再向控制寄存器写入新的命令字。,(2)屏蔽字写入屏蔽寄存器。当某通道正在进行初始化编程时,接收到DMA请求,可能本初始化结束,8237A就开始进行DMA传送,从而导致出错。因此,初始化编程时,必须先屏蔽未初始化的通道,在初始化结束后再解除对该通道的屏蔽。(3)方式字写入方式寄存寄器。规定通道传送类型及工作方式。(4)置0先/后触发器。对端口地址DMA+0CH执行一条输出指令,从而产生一个写

27、命令,即可置0先/后触发器,为初始化基地址寄存器和基本字节寄存器作准备。,(5)写入基地址和基本字节寄存器。把DMA操作所涉及到的存储区首地址或末地址写入地址寄存器,把要传送的字节数减1,写入基本字节寄存器。这几个寄存器都是16位的,因此写入要分两次进行;先写低8位,后写高8位。(6)解除屏蔽。初始化空间通道的屏蔽寄存器写入D2D00的命令,将相应通道的屏蔽触发器置0,准备响应DMA请求。(7)写入请求寄存器。如果采用软件DMA请求,在完成通道初始化之后,在程序的适当位置向请求寄存器写入D2D0=1命令,即可使相应通道进行DMA传送。,6.4DMA的应用举例,18237A在IBMPC/AT系统中的应用,286微机系统使用两片8237A级联,如图6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论