DMA-总结

本文详细介绍了DMA(Direct Memory Access)技术,解释了其如何允许外部设备和内存之间直接进行高速数据传输,无需CPU干预。探讨了DMA的应用场景、传输方式、工作原理以及控制器的基本组成等内容。

概念
DMA “Direct Memory Access(存储器直接访问)。这是指一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据。整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外(开始和结束时候要做中断处理),在传输过程中CPU可以进行其他的工作(前提是未设置停止CPU访问)。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高”。

DMA传送方式是让存储器与外设、或外设与外设之间直接交换数据,不需要经过CPU的累加器中转,减少了这个中间环节,并且内存地址的修改、传送完毕的结束报告都是由硬件电路实现的,因此大大地提高了数据的传输速度。一个DMA传送只需要执行一个DMA周期,相当于一个总线读写周期。

DMA是在专门的硬件( DMA)控制下,实现高速外设和主存储器之间自动成批交换数据尽量减少CPU干预的输入/输出操作方式。

适用场合
DMA方式主要适用于一些高速的I/O设备。这些设备传输字节或字的速度非常快。对于这类高速I/O设备,如果用输入输出指令或采用中断的方法来传输字节信息,会大量占用CPU的时间,同时也容易造成数据的丢失。而DMA方式能使I/O设备直接和存储器进行成批数据的快速传送。

DMA传送主要用于需要高速大批量数据传送的系统中,以提高数据的吞吐量。如磁盘存取、图像处理、高速数据采集系统、同步通信中的收/发信号等方面应用甚广。通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。

DMA控制器(DMAC)
DMA传送虽然脱离CPU的控制,但并不是说DMA传送不需要进行控制和管理。通常是采用DMA控制器来取代CPU,负责DMA传送的全过程控制。目前DMA控制器都是可编程的大规模集成芯片。

DMA控制器是内存储器同外设之间进行高速数据传送时的硬件控制电路,是一种实现直接数据传送的专用处理器,它必须能取代在程序控制传送中由CPU和软件所完成的各项功能。它的主要功能是:
(1)DMAC同外设之间有一对联络信号线--外设的DMA请求信号DREQ以及 DMAC向外设发出的DMA响应信号DACK;(如下图)
(2)DMAC在接收到DREQ后,同CPU之间也有一对联络信号线--DMAC向CPU 发出总线请求信号(HOLD或BUSRQ),CPU在当前总线周期结束后向DMAC发出总线响应信号(HLDA或BUSAK),DMAC接管对总线的控制权,进入DMA操作方式;
(3)能发出地址信息,对存储器寻址,并修改地址指针,DMAC内部必须有能自动加1或减1的地址寄存器;
(4)能决定传送的字节数,并能判断DMA传送是否结束。DMA内部必须有能自动减1的字计数寄存器,计数结束产生终止计数信号;
(5)能发出DMA结束信号,释放总线,使CPU恢复总线控制权;
(6)能发出读、写控制信号,包括存储器访问信号和I/O访问信号。DMAC内部必须有时序和读写控制逻辑。

DMA传输过程
1、当外设有DMA需求,并且准备就绪,就向DMAC控制器发出DMA请求信号DREQ。
2、DMAC接到DMA请求信号后向CPU发出总线请求信号HRQ。该信号连接到CPU的HOLD信号。 3、CPU接到总线请求信号以后,如果允许DMA传输,则会在当前总线周期结束后,发出DMA响应信号HLDA。一方面CPU将控制总线、数据总线和地址总线置高阻态,即放弃对总线的控制权;另一方面CPU将有效的HLDA信号送给DMAC,通知DMAC,CPU已经放弃了对总线的控制权。
4、DMAC获得对总线的控制权,并且向外设送出DMAC的应答信号DACK,通知外设可以开始进行DMA传输了。
5、DMAC向存储器发送地址信号和向存储器及外设发出读/写控制信号,控制数据按初始化设定的方向传送,实现外设与内存的数据传输。
6、数据全部传输结束后,DMAC向CPU发HOLD信号,要求撤销总线请求信号。CPU收到该信号以后,使HLDA无效,同时收回对总线的控制权。

DMA控制器的基本组成
一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路,这个接口电路是在中断接口的基础上再加DMA机构组成。习惯上将DMA方式的接口电路称为DMA控制器。
(1)内存地址计数器:用于存放内存中要交换的数据的地址。
(2)字计数器:用于记录传送数据块的长度(多少字数)。
(3)数据缓冲寄存器:用于暂存每次传送的数据(一个字)。
(4)"DMA请求"标志:每当设备准备好一个数据字后给出一个控制信号,使"DMA请求"标志置"1"。该标志置位后向"控制/状态"逻辑发出DMA请求,后者又向CPU发出总线使用权的请求(HOLD),CPU响应此请求后发回响应信号HLDA,"控制/状态"逻辑接收此信号后发出DMA响应信号,使"DMA 请求"标志复位,为交换下一个字做好准备。
(5)"控制/状态"逻辑:由控制和时序电路以及状态标志等组成,用于修改内存地址计数器和字计数器,指定传送类型(输入或输出),并对"DMA请求"信号和CPU响应信号进行协调和同步。
(6)中断机构:当字计数器溢出时,意味着一组数据交换完毕,由溢出信号触发中断机构,向CPU提出中断报告。

DMA的工作方式 (因为DMA和CPU都要使用总线,工作方式的区分也就是基于总线的分配方式)
1、停止CPU访内;
总线全部给DMA使用。
2、周启挪用方式;
周期挪用,又叫周期窃取,是指利用CPU不访问存储器的那些周期来实现DMA操作,此时DMA可以使用总线而不用通知CPU也不会妨碍CPU的工作。周期挪用并不减慢CPU的操作,但可能需要复杂的时序电路,而且数据传输过程是不连续的和不规则的。
(周期窃取,是DMA方式中由DMA接口向CPU申请占用总线,占用一个存取周期。)
与CPU暂停访存的方式相比,它既实现了I/O传送,又较好地发挥了主存与CPU的效率,是一种广泛采用的方法。应该指出,I/O设备每挪用一个主存周期都要申请总线控制权、建立总线控制权和归还总线控制级权。因此,尽管传送一个字对主存而言只占用一个主存周期,但对DMA接口而言,实质上要占2—5个主存周期(由逻辑线路的延迟特性而定)。因此周期挪用的方法比较适合于I/O设备的读写周期大于主存周期的情况。
3、DMA与CPU交替访内。

DMA传输方式
1、单字节传输方式;
一次DMA只传输一个字节,效率很低。但是在传输过程中CPU有机会获取对总线的控制器。
2、数据块传输方式;
数据以数据块的方式进行传输。只要DREQ启动就会连续地传送数据块。一次请求传送一个数据块,效率高。在数据的传送期间,CPU长时间无法控制总线。
3、请求传输方式;
DREQ信号有效就连续传输数据,否则不能进行数据的传输。
4、级联传输方式。
用于通过多个DMA控制器级联以扩展通道。第一级只起优先权网络的作用,实际的操作由第二级芯片完成。还可由第二级到第三级等。(多个DMAC)

            DMA控制器级联图

DMA传送类型
1、两个设备之间;
2、设备和内存之间;(多数情况下,DMAC进行的是外设接口和内存之间的传输。)
3、内存和内存之间。
DMA读:把数据由存储器传送到外设。
DMA写:把外设输入的数据写入存储器。
DMA检验(控操作):DMAC不进行任何检验,外设可以进行DMA校验,存储器和 I/O 控制线保持无效,不进行传送。

DMA技术的弊端
DMA传送的优点是以增加系统硬件的复杂性和成本为代价的,因为DMA是用硬件控制代替软件控制的。另外,DMA传送期间CPU被挂起,部分或完全失去对系统总线的控制,这可能会影响CPU对中断请求的及时响应与处理。因此,在一些小系统或速度要求不高、数据传输量不大的系统中,一般并不用DMA方式。
因为DMA允许外设直接访问内存,从而形成对总线的独占。这在实时性强的硬实时系统嵌入式开发中将会造成中断延时过长。

 参考自:http://blog.51cto.com/weiqijun/71651

转载于:https://www.cnblogs.com/debruyne/p/9506705.html

sh-3.2# ./home/animation_demo USAGE: Choose one of the following options, then press enter: 'P' to toggle between PAUSE and PLAY 'S' to increase playback speed, 's' to decrease playback speed 'D' to toggle playback direction 'N' to move to next frame (in the current direction, better in PAUSE) 'Q' to quit Running...251 Pipeline state changed from NULL to READY: [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached Pipeline state changed from READY to PAUSED: Pipeline state changed from PAUSED to PLAYING: Seeking is ENABLED from 0:00:00.000000000 to 0:00:07.105306123 [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached [DMABUFHEAPS]OpenDmabufHeap: Using DMA-BUF heap named: mtk_mm-uncached End-Of-Stream reached.5464 / 0:00:07.170000000 (animation_demo:4695): GLib-CRITICAL **: 21:35:20.600: g_io_channel_unref: assertion 'channel != NULL' failed sh-3.2#
最新发布
08-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值