第六章 直接存储器存取DMA,6.1 DMA的工作原理及工作过程 6.2 DMA控制器及8237DMA控制器 6.3 8237A的初始化编程 6.4 DMA的应用举例,6.1.1 DMA的传送原理 DMA方式用硬件实现存储器与存储器之间或存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预这种方式通常用来传送数据块 DMA传送包括:RAM→I/O端口的DMA读传送;I/O端口 →RAM的DMA写传送;RAM→RAM的存储单元传送6.1 DMA的工作原理及工作过程,DMA传送的基本特点是不经过CPU,不破坏CPU内各寄存器的内容,直接实现存储器与I/O设备之间的数据传送在IBM PC系统中,以DMA方式传送一个字节的时间通常是1个总线周期,即5个时钟周期CPU内部的指令操作只是暂停这个总线周期,然后继续操作,指令的操作次序不会被破坏所以DMA传送的方式特别适合用于外部设备与存储器之间高速成批的数据传送图6-1是实现DMA传送的基本原理图,图中以系统总线为界,左侧位于主机板内,其中有DMA控制器;右侧有存储器(部分存储器在主机板内)、外设和外设接口,它们通过I/O插槽与系统总线相接。
图6-1 DMA传送的基本原理图,6.1.2 DMA的工作过程,图 6-2 DMA的传送过程,从图中可以看出,系统总线分别受到CPU和DMAC这两个器件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息, DMAC也可以向地址总线、数据总线和控制总线发送信息但是,在同一时间,系统总线只能受一个器件控制当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控制器接管这3个总线的控制权5) DMA控制器向I/O端口发出DMA响应信号 (6) DMA控制器把进行DMA传送涉及到的RAM地址送到地址总线上如果进行I/O端口→RAM传送,DMAC向I/O端口发出I/O读命令,向RAM发出存储器写命令;如果进行RAM→I/O端口传送,DMAC向RAM发出存储器读命令,向I/O端口发出I/O写命令,从而完成一个字节的传送。
(7) 当设定的字节数传送完毕,DMA传输过程结束后,也可以由来自外部的终止信号迫使传输过程结束当DMA传送结束后,DMA控制器就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将总线响应信号变成无效,于是,CPU重新控制三总线,继续执行被中断的当前指令的其他总线周期 2. DMA的传送方式 DMA用硬件在外设与内存之间直接进行数据交换 通常系统的数据和地址总线以及一些控制信号线(如IO/、RD、WR等)是由CPU管理的,在DMA方式下,就要求 CPU让出总线(也就是将这些总线置为高阻状态),而由DMA控制器(DMAC)接管总线通常,大部分DMA都有三种DMA传送方式 (1) 单字节传送方式每次DMA传送只传送一个字节的数据,传送后释放总线,CPU至少控制一个完整的总线周期,然后测试DMA请求线DREQ,若有效,再进入DMA周期在这种方式中要注意: ① DMA响应信号DACK有效前, DREQ必须保持有效 ② 若DREQ在传送过程中一直保持有效, 则在两次传送之间必须释放总线 (2)成组传送方式一个DMA请求可以传送一组信息在DMAC初始化时,由编程决定这一组信息的字节数,只要在DACK有效之前DREQ保持有效即可。
一旦DACK有效,不管DREQ是否有效,DMAC一直不放弃总线控制权, 直到整个数组传送完 (3)请求传送方式请求传送方式又称查询传送方式该方式的传送类似成组传送方式,但每传送一个字节后,DMAC就检测DREQ:若无效,则挂起;若有效,则继续DMA传送,直到外加信号强制DMAC中止操作3. DMA 的特点 DMA具有下列特点: (1) 它使主存既可被CPU访问, 又可被外设直接访问 (2) 当传送数据块时,主存地址的确定、传送数据的计数控制等都用硬件电路直接实现 (3) 主存中要开设专用缓冲区,及时供给和接收外设的数据 (4) DMA传送速度快,可使CPU和外设并行工作,提高了系统的效率 (5) DMA在开始前和结束后要通过程序和中断方式进行预处理和后处理6.2 DMA控制器及8237DMA控制器,6.2.1 8237A的外部引脚 8237A是微机系统中实现DMA功能的大规模集成电路控制器 PC/XT使用一片8237A, PC/AT使用两片8237A, 在高档微机中常使用多功能芯片取代8237A,但多功能芯片中的DMA控制器与8237A的功能基本相同1. 8237A的内部结构和引脚功能 8237A是具有4个独立DMA通道的可编程DMA控制器(DMAC),它使用单一的+5 V电源、单相时钟和40引脚双列直插式封装。
在实际应用中,8237A必须与一片8位锁存器一起使用,才能形成一个完整的4 通道DMA控制器8237A经初始化后, 可以控制每一个通道在存储器和I/O口之间以最高1.6 M波特的速率传送最多达64 KB的数据块, 而不需要CPU的介入8237A的基本功能如下: (1) 一个芯片中有4个独立的DMA通道 (2) 每一个通道的DMA请求都可以被允许或禁止 (3) 每个通道的DMA请求有不同的优先级, 既可以是固定优先级, 也可以是循环优先级 (4) 每个通道一次传送的最大字节数为64 KB (5) 8237A提供4种传送方式:单字节传送方式、数据传送方式、请求传送方式和级联传送方式 ,图 6-3 8237A内部结构,(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-4 8237A引脚图,RESET: 复位输入端,高电平有效当RESET有效时,屏蔽寄存器被置1(4个通道均禁止DMA请求),其他寄存器均清0, 8237A处于空闲周期,所有控制线都处于高阻状态,并禁止4个通道的DMA操作复位后必须重新初始化;否则8237A不能进入DMA操作 READY: “准备就绪”信号输入端,高电平有效当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期当传输完成时,READY端变为高电平, 以表示存储器或I/O设备准备就绪DACK0~DACK3:DMA对各个通道请求的响应信号, 输出的有效电平可由编程设定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信号后,在当前总线周期结束之后让出总线,并使HLDA信号有效 A3~A0:地址总线低4位,双向当CPU控制总线时,它们是地址输入线CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程当8237A控制总线时, 由这4条线输出要访问的存储单元的最低4位地址 A7~A4: 地址线,输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位DB7~DB0:8位双向数据线,与系统数据总线相连在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7~DB0, 以了解8237A的工作情况也可以通过I/O写命令对DMA控制器的内部寄存器进行编程在DMA控制器控制总线时,DB7~DB0输出要访问的存储单元的高8位地址(A15~A8),并通过ADSTB锁存到外部地址锁存器中,和A7~A0输出的低8位地址一起构成16位地址8237A仅支持64 KB寻址,为了访问超过64 KB范围的其他地址空间,系统中增设了页面寄存器在PC/XT微机系统中,每一通道的页面寄存器是4位寄存器。
当一个DMA操作周期开始时,相应的页面寄存器内容就放到系统地址总线A19~A16上,和8237A送出的16位低地址一起,构成20位物理地址6.2.2 8237A的工作方式 DMA控制器8237A依靠它的可编程特性可以实现对多种DMA传送方式的控制 用程序的方法置入控制字(或称命令字)可以设置和改变DMA传送方式 置入控制寄存器的控制字控制着与整个DMA控制器有关的工作方式置入各通道内方式寄存器的控制器的控制字控制着本通道的工作方式 8237A在DMA传送时有4种工作方式1. 单字节传送方式 单字节传送方式是编程为一次只传送一个字节,数据传送后字节计数器减量,地址要相应修改(增量或减量取决于编程),HRQ变为无效,释放系统总线 若传送使字节数减为零, TC产生或者终结DMA传送,或重新初始化 在这种方式下,DREQ 信号必须保持有效,直至DACK 信号变为有效,但是若DREQ有效的时间覆盖了单字节传送所需要的时间,则8237A在传送完成一个字节后,先释放总线,然后再产生下一个DREQ ,完成下一个字节的传送在8080/8086系统中, 这样的方法在两次DMA传送之间,CPU至少执行一个机器周期 。
2. 成组传送方式 在成组传送方式下,8237A DREQ启动后,开始连续地传送数据,直至字节计数器减到零,产生TC,或者由外部输入有效的EOP信号来终结DMA传送 在这种方式下,DREQ 信号需要维持到数据块传送完成或终结操作4. 级联方式 级联方式用于通过级联以扩展通道第二级的HRQ和HLDA信号连到第一级的DREQ和DACK上, 如图6-5所示 第二级各个片子的优先权等级与所连的通道相对应在这种工作情况下,第一级只起优先权网络的作用, 除了由某一个二级的请求向CPU输出HRQ信号外, 并不输出任何其他信号, 实际的操作是由第二级的片子完成的, 若有需要,还可以由第二级扩展到第三级等等6.2.3 8237A的内部寄存器,表6-1 8237A内部寄存器,1. 控制寄存器,图6-6 控制寄存器格式,(1) D0: 规定8237A是否工作在存储器传送方式 8237A约定:当进行存储器之间的数据传送时,由通道0提供源地址,通道1提供目的地址并进行字节计数每传送一个字节需要两个总线周期,第1个总线周期先将源地址单元的数据读入8237A的暂存器,第2个总线周期再将暂存器的内容放到数据总线上,然后在写信号的控制下,写入目的地址单元。