您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 第八章直接存储器存取DMA
本章内容提要:DMA的工作原理及工作过程DMA控制器8237A的初始化编程DMA的应用举例第八章直接存储器存取DMA8.1DMA的工作原理及工作过程数据在I/O接口与存储器之间传送,不经CPU的干预,而是在专用硬件电路的控制下直接传送。这种方式称为直接存储器存取(directmemoryaccess,DMA)。为了实现这种工作方式而设计的专用接口电路,称为DMA控制器(DMAC)。例如,Intel公司的8257、8237,Zilog公司的28410,Motorola公司的MC6844等。DMA控制方式的主要优点是:速度快,数据传送的速率只受存储器访问的限制。由于CPU不参与操作,因此省去了CPU取指令、指令译码、取数和送数等操作。DMA控制方式的主要缺点是:硬件电路比较复杂。8.1.1DMA的传送原理直接存储器存取(DMA)方式,顾名思义,就是用硬件实现存储器与存储器之间或存储器与I/O设备之间直接进行高速数据传送,不需要CPU的干预。这种方式通常用来传送数据块。因此,DMA方式在微机中常用来作为视频显示、磁盘或光盘DMA传送包括:RAM→I/O端口的DMA读传送;I/O端口→RAM的DMA写传送;RAM→RAMDMA传送的基本特点是不经过CPU,不破坏CPU内各寄存器的内容,直接实现存储器与I/O设备之间的数据传送。在IBMPC系统中,DMA方式传送一个字节的时间通常是一个总线周期,即5个时钟周期。CPU内部的指令操作只是暂停这个总线周期,然后继续操作,指令的操作次序不会被破坏。所以DMA传送的方式特别适合用于外部设备与存储器之间高速成批的数据传送。8.1.1DMA的传送原理8.1.2DMA的工作过程DMA传送过程如图所示。从图中可以看出,系统总线分别受到CPU和DMAC这两个器件的控制,即CPU可以向地址总线、数据总线和控制总线发送信息,DMAC也可以向地址总线、数据总线和控制总线发送信息。但是,在同一时间,系统总线只能受一个器件控制。当CPU控制总线时,DMAC必须与总线脱离;而当DMAC控制总线时,CPU必须与总线脱离。因此,CPU与DMAC之间必须有联络信号。8.1.2DMA的工作过程8.1.2DMA的工作过程DMA1)I/O端口向DMA控制器发出DMA2)DMA控制器在接到I/O端口的DMA请求后,向CPU发出总线请求信号,请求CPU3)CPU在执行完当前指令的当前总线周期后,向DMA控制4)CPU随即和系统的控制总线、地址总线及数据总线脱离关系,处于等待状态,由DMA控制器接管这35)DMA控制器向I/O端口发出DMA6)DMA控制器把进行DMA传送涉及到的RAM地址送到地址总线上。如果进行I/O端口→RMA传送,DMAC向I/O端口发出I/O读命令,向RAM发出存储器写命令;如果进行RAM→I/O端口传送,DMAC向RAM发出存储器读命令,向I/O端口发出I/O写命令,从而完成一个字节的传送。8.1.2DMA的工作过程7)当设定的字节数传送完毕,DMA传输过程结束,也可以由来自外部的终止信号迫使传输过程结束。当DMA传送结束后,DMA控制器就将总线请求信号变成无效,并放弃对总线的控制,CPU检测到总线请求信号无效后,也将总线响应信号变成无效,于是,CPU重新控制三总线,继续执行被中断的当前指令的其他总线周期DMA用硬件在外设与内存之间直接进行数据交换。通常系统的数据和地址总线以及一些控制信号线(如IO/M、RD、WR等)是由CPU管理的,在DMA方式,就要求CPU让出总线(也就是将这些总线置为高阻状态),而由DMA控制器(DMAC)接管总线。通常,大部分DMA都有3种DMA传送方式:单字节传送方式,块传送方式和请求传送方式。8.1.2DMA的工作过程DMA1)它使主存既可被CPU访问,又可被外设直接访问。2)当传送数据块时,主存地址的确定、传送数据的计3)主存中要开设专用缓冲区,及时供给和接收外设的4)DMA传送速度快,可使CPU和外设并行工作,提5)DMA在开始前和结束后要通过程序和中断方式进行预处理和后处理。8.2DMA控制器8.2.18237A的外部引脚8237A是微机系统中实现DMA功能的大规模集成电路控制器。PC/XT使用一片8237A,PC/AT使用两片8237A,在高档微机中常使用功能芯片取代8237A,但多功能芯片中的DMA控制器与8237A的功能基本相同。8.2.18237A的外部引脚1.8237A8237A是具有4个独立DMA通道的可编程DMA控制器(DMAC),它使用单一的+5V电源、单相时钟、40引脚双列直插式封装。在实际应用中,8237A必须与一片8位锁存器一起使用,才能形成一个完整的4通道DMA控制器。8237A必须经初始化后,可以控制每一个通道在存储器和I/O口之间以最高1.6Mb/s的速率传送最多达64KB的数据块,而不需要CPU的介入。8237A1)每片芯片中有4个独立的DMA通道,可以连接42)每一个通道的DMA3)每个通道的DMA请求有不同的优先级,即可以是固定优先级,也4)每个通道一次传送的最大字节数为64KB5)8237A提供4种传送方式:单字节传送方式、数据传送方式、请求6)可用级联方式任意扩展其通道数。8.2.18237A的外部引脚8237A的内部结构如图所示8.2.18237A的外部引脚1)DMA通道。8237A内部包含4个独立通道,每个通道包含2个16位的地址寄存器、2个16位的字节寄存器、1个6位的方式寄存器、1个DMA请求触发器和1个DMA屏蔽触发器。此外,4个通道共用1个8位控制寄存器、1个8位状态寄存器、1个8位暂存器、1个8位屏蔽寄存器和1个8位请求寄2)读/写逻辑。当CPU对8237A初始化或对8237A寄存器进行读操作时,8237A就像I/O端口一样被操作,读/写逻辑接收IOR式IOW信号。当IOR为低电平时,CPU可以读取8237A的内部寄存器值;当IOW为低电平时,CPU可以将数据写入8237ADMA传送期间,系统由8237A控制总线。此时,8237A分两次向地址总线上送出要访问的内存单元20位物理地址中的低16位,8237A输出必要的读/写信号,这些信号分别为I/O读信号IOR、I/O写信号IOW、存储器读信号MEMR和存储器写信号MEMW3)控制逻辑。在DMA周期内,控制逻辑通过产生相应的控制信号和16位要存取的内存单元地址来控制DMA的操作步骤。初始化时,通过对方式寄存器进行编程,使控制逻辑可以对各个通道的操作进行控制。8.2.18237A的外部引脚2.8237A是具有40个引脚的双列直插式器件,图为8237A的引脚图。8.2.18237A的外部引脚CLK:时钟输入端,通常接到8234时钟发生器的输出引脚,用来控制8237A内部操作定时和DMA传送时的数据传送速率。8237A-3的时钟频率为3MHz,8237A-5的钟频率为5MHz,后者是8237A的改进型,工作速度比较高,但工作原理及使用方法与8237ACS:片选输入端,低电平有效。片选信号有效时,8237A处于可编程状态。CS=0时,CPU的I/O写操作对8237A写入编程控制字、地址初值、传输的字长;CPU的I/O读操作可以从8237A读状态、当前地址、当前传输的字节数。在8237A取得总线控制权后,就自动使CS=1,这样在DMA操作期间,CPU被禁止使用8237ARESET:复位输入端,高电平有效。当RESET有效时,清除命令、状态、请求和暂存寄存器的内容。屏蔽寄存器被置1(4个通道均禁止DMA请求),其他寄存器均清0,8237A处于空闲周期,所有控制线都处于高阻状态,并禁止4个通道的DMA操作。复位后必须重新初始化。否则8237A不能进入DMA操作。READY:“准备就绪”信号输入端,高电平有效。当所选择的存储器或I/O端的速度比较慢,需要延长传输时间时,使READY端处于低电平,8237A就会自动地在存储器读和存储器写周期中插入等待周期。当传输完成时,READY端变为高电平,以表示存储器或I/O设备准备就绪。8.2.18237A的外部引脚ADSTB:地址选通输出信号,高电平有效。当此信号有效时,表示8237A当前地址寄存器的高8位经数据总线DB7~DB0锁存到外部地址锁存器中。AEN:地址允许输出信号,高电平有效。在DMA操作期间,AEN信号为高电平时,直接将外部地址锁存器中锁存的高8位地址输出到地址总线上,与芯片直接输出的低8位地址一起共同构成内存单元的低16MEMR:存储器读信号,低电平有效,输出,只用于DMA传送。在DMA读MEMW:存储器写信号,低电平有效,输出,只用于DMA传送。在DMA写IOR:I/O读信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU读8237A内部寄存器。当8237A控制总线时,它是输出信号,与MEMW相配合,控制数据由I/OIOW:I/O写信号,低电平有效,双向。当CPU控制总线时,它是输入信号,CPU写8237A内部寄存器(初始化)。当8237A控制总线时,它是输出信号,与MEMR相配合,把数据从存储器传送至I/O端口。8.2.18237A的外部引脚EOP:DMA传送过程结束信号,低电平有效,双向。当DMA控制的任一通道计数结束时,会从EOP引脚输出一个低电平,表示DMA传输结束。而当外部向DMA控制输入EOP信号时,DMA传送过程将被强迫结束,无论是从外部终止DMA过程,还是内部计数结束引起DMA过程终止,都会使DMA控DREQ0~DREQ3:DMA请求输入信号,有效电平可由编程设定。该信号分别对应4个独立的DMA通道请求的输入,这4条DMA请求线是外设为取得DMA服条而送到各个通道的请求信号。在固定优先级的情况下,DREQ0的优先级最高,DREQ3的优先级最低。在优先级循环方式下,某通道的DMA请求被响应后,随即降为最低级。8237A用DACK信号作为对DREQ的响应,因此在相应的DACK信号有效之前,DREQ信号必须维持有效。DACK0~DACK3:DMA对各个通道请求的响应信号、输出的有效电平可由编程设定。8237A接收到通道请求,向CPU发出DMA请求信号HRQ,当8237A获得CPU送来的总线允许信号HLDA后,便产生DACK信号,送到相应的I/O端口,表示DMA控制器响应外设的DMA请求,从而进入DMA服务过程。8.2.18237A的外部引脚HRQ:8237A输出给CPU的总线请求信号,高电平有效。当外设的I/O端口要求DMA传送时,向DMA控制器发送DREQ信号,如果相应的通道屏蔽位为0,即DMA请求未被屏蔽,则DMA控制器的HRQ端输出为有效电平,从而向CPU发出HLDA:总线响应信号,高电平有效,是CPU对HRQ信号的应答。当CPU接收到HRQ信号后,在当前总线周期结束之后让出总线,并使HLDAA3~A0:地址总线低4位,双向三态。当CPU控制总线时,它们是地址输入线。CPU用这4条地址线对DMA控制器的内部寄存器进行寻址,完成对DMA控制器的编程。当8237A控制总线时,由这4条线输出要访问的存储单元的最低4位地址。A7~A4:地址线,单向输出,只用于在DMA传送时,输出要访问的存储单元的低8位地址中的高4位。8.2.18237A的外部引脚DB7~DB4:8位双向数据线,与系统总线相连。在CPU控制总线时,CPU可以通过I/O读命令从DMA控制器中读取内部寄存器的内容,送到DB7~DB0,以了解8237A的工作情况。也可以通过I/O写命令对DMA控制器的内部寄存器进行编程。在DMA控制器控制总线时,DB7~DB0输出要访问的存储单元的高8位地址(A15~A8),并通过ADSTB锁存到外部地址锁存器中,并和A7~A0输出的低8位地址一起构成16位地8237A仅支持64KB寻址,为了访问超过64KB范围的其他地址空间,系统中增设了页面寄存器。在PC/XT微机系统中,每一通道的页面寄存器是4位寄存器。当一个DMA操作周期开始时,相应的页面寄存器内容就放到系统地址总线A19~A16上,和
本文标题:第八章直接存储器存取DMA
链接地址:https://www.777doc.com/doc-3602987 .html