您的位置: 网站首页 > 程序开发 > 汇编语言与微机原理教程 > 第7章 微机的DMA系统 > 【7.1 DMA系统简介】

7.1 DMA系统简介

 

所谓直接存储器传送是指将外设的数据不经过CPU直接送入内存储器,或者从内存储器不经过CPU直接送往外部设备。一次DMA传送只需要执行一个DMA周期(相当于一个总线读/写周期),因而能够满足高速外设数据传输的需要。

在进行DMA存取时,CPU让出总线控制权,不再采用输入/输出指令的方法进行数据存取,而用一个专门的硬件控制电路控制外设与存储器或者存储器与存储器直接交换数据,减少了中间环节,从而提高了传送速率和CPU的效率。用来控制DMA传送的硬件控制电路就是DMA控制器(DMAC)。

本章主要内容

&        DMA传输的原理

&        8237A及其编程

7.1  DMA系统简介

7.1.1  DMA系统的基本概念

系统I/O利用中断进行信息传送,可以大大提高CPU的利用率,但是其传送过程必须由CPU进行监控。每次都要保护断点、保护现场、进入中断服务子程序,中断服务完毕又要恢复现场、恢复断点、返回主程序,操作繁多步骤重复,对低速外设和数据量不大的I/O操作,这些缺点不明显,中断传送不失为一种行之有效的传送方式。但对成批高速数据传输效率就较低,会占用一定的CPU时间。如果需要在内存的不同区域之间,或者在内存与外设端口之间进行数据块的高速传送的话,使用查询或中断方式就不能满足速度上的要求,这时应采用直接数据传送(Direct Memory AccessDMA),即DMA数据传送方式。

DMA数据传送是在内存的不同区域之间,或者在内存与外设端口之间直接进行的数据传送。它不经过CPU中转,是由硬件直接控制的一种数据传送方式,而当进入DMA方式(内存和外设直接交换数据)时,CPU让出上述三类总线。CPU连接这些总线的三态门处于高阻状态,而由DMAC对总线进行控制和管理,直接与外设和内存交换数据,这样就可以大大提高数据的传送速率。

DMA传送的基本特点是不经过CPU,不破坏CPU各寄存器的内容,直接实现存储器与I/O之间的数据传送。图7-1DMA传送的基本原理图,DMA传送的基本过程如下所示。

1I/O接口准备好,希望进行DMA操作时,就向DMAC发出DMA请求信号DRQ

2DMA控制器将此请求信号转变成对CPU的总线请求信号HRQ

3CPU当前总线周期执行结束,响应DMA请求,发出总线应答信号HLDA,此时由DMA控制器接管对总线的控制。

4)由DMA控制器对存储器寻址,并发出相应控制信号(DACKRDWR),使存储器与I/O接口之间直接交换数据。

5)在传送一字节数据后,DMAC自动修改存储器地址和传送字节计数器,并检测传送是否结束。

6DMA传送结束,DMA控制器向CPU发出结束信号,并释放总线,使CPU重新获得总线控制,恢复正常工作。

7-1  DMA传送的基本原理

7.1.2  DMA系统的功能

下面简要介绍与DMA相关的一些内容。

1DMA传送方式

DMA传送方式解决了内存的不同区域之间或内存与外设之间数据块的高速传送问题,代价是需要增加专门的硬件控制电路,称为DMA控制器。其复杂程度与CPU相当,其接口电路如图7-2所示。

7-2  DMA接口电路

DMA的传送过程如下所示。

1)若外设有传送要求,将向DMAC发送DMA请求信号DMAREQ,该信号维持到DMAACK响应为止。DMAC收到请求后,向CPU发送总线请求信号HOLD,表示希望占用总线,该信号在整个传送过程中维持有效。CPU在当前总线周期结束时响应请求,向DMAC发送总线响应信号HLDA,表示已放弃总线,即总线呈高阻态。此时,控制器DMAC向设备回送DMA响应信号DMAACK,该信号将清除DMA请求触发器,意味着传送即将开始。

2)传送开始时,DMAC向存储器发送读控制信号MEMR(或IOR),同时向输出设备发送写控制信号IOW(或MEMW),完成一个字节的传送。

3DMAC内部具有自动增减存储器地址和计数功能,据此判断任务是否完成。如果传送尚未完成,重复上一步继续传送;如果传送完成,将使CPU的总线请求信号HOLD无效,通知CPU传送结束。此时,CPU将重新接管对总线的控制。

2DMA的数据传送方式

DMA有以下两种数据传送方式。

·    字节方式:每次总线请求只传送一个字节数据,传送完一个字节后释放总线,接着由CPU执行总线周期操作,两者交替运行,直到DMA传送结束。

·    字块方式:总线请求后连续传送一个数据块,待数据块全部传送完毕才释放总线。

DMA操作有以下3种执行方法。

1CPU停止访问内存。这是最常用最简单的方法。如前面所介绍的那样,DMAC的总线请求迫使CPU让出总线控制权(CPU在当前总线周期结束后使数据、地址和三态控制引脚处于浮空状态),由DMAC控制总线进行DMA传送,直到DMA传送结束,撤销DMA请求,CPU恢复对总线的控制,继续执行中止的指令周期。在DMA传送期间CPU只执行不需要总线传输的内部操作,这些操作执行完后动态停机。

2)周期挪用(cycle stealing)。外设有DMA请求并得到CPU响应,CPU让出一个周期的总线控制权,由DMA控制器控制系统总线,挪用一个存取周期传送一个字节或一个字;然后DMA控制器将总线控制权交回CPUCPU继续进行自己的操作,等待下一个DMA请求的到来。重复上述过程,直至数据块传输完毕。这实际上就是计算机中常用的字节传送方式。若在同一时刻发生CPUDMA的访问内存冲突,则DMA访问优先,CPU等待一个存取周期。当内存工作速度高出外设较多时采用周期挪用法可以提高内存利用率,对CPU的影响较小。若在DMA传输期间CPU无须访问内存,则该方法对CPU执行程序无影响。

3)周期扩展。当需要进行DMA操作时,由DMAC发出请求信号给专门的时钟发生器/驱动器电路,使之提供给CPU的总线周期扩展,而提供给存储器和DMAC的不变。这样CPU完成指令规定的操作后仍有几个相当于原有时钟周期的时间留给存储器和DMAC进行DMA传送。MC6844就是可以使用这种方法的DMAC。周期扩展方法使CPU处理速度减慢,而且扩展的宽度受到限制,一次只能传送一个字节。DMA传送只需CPUDMAC各有一对相应的请求响应联络线,而无须附加外部逻辑电路。

38086系统中的DMA信号

8086最小系统中,CPU通过HOLD引脚接收DMA控制器的总线请求,在HLDA引脚上发出对总线请求的允许信号。通常,CPU接收到总线请求信号并完成当前总线操作以后,就会使HLDA出现高电平而响应总线请求,DMA控制器于是就成了控制总线的部件。此后,DMA控制器将HOLD信号变为低电平时,便放弃了对总线的控制。8086检测HOLD信号变为低电平后,也将HLDA信号变为低电平。于是,CPU又控制了系统总线。

8086 CPU工作于最大模式时,通过RQ/GT0RQ/GT1引脚接收DMA控制器的总线请求,在同一根线上发送对总线请求的允许信号。RQ/GT0引脚具有较高的优先权。

80x86 CPUDMA方式接口电路如图7-3所示。

7-3  DMA方式接口电路(80x86

直接存储器存取方式的工作过程如下所示。

1当外设准备就绪后,通过I/O端口向DMAC发出DMA请求信号,要求DMA传送。

2)接着DMACCPU发出HOLD总线请求信号,请求接管总线。

3CPU收到HOLD信号,如果不在总线封锁状态,则在现行总线周期结束后便会响应,发出HLDA信号到DMAC,使CPU与三态的系统总线(数据、地址和状态控制线)浮空。

4DMAC收到HLDA后立即接管总线,并向I/O端口回送DMA响应信号,通知外设进行DMA传送。

5)进行DMA传送。DMA传送的内存地址、读/写控制信号及传送的字节数或字数由DMAC控制(通过对DMAC事先初始化编程来设置)。

6DMA传送结束。设定的字节数或字数传送完毕,或者外部发送一个结束传送的控制信号,DMAC撤销向CPU的总线请求信号HOLDCPU也撤销总线响应信号HLDA,重新控制系统总线继续运行原来的程序。