内存直接存取——基本原理结构和应用四辑系列文章之二

内存直接存取——基本原理结构和应用四辑系列文章之二

ID:46089268

大小:323.00 KB

页数:8页

时间:2019-11-20

内存直接存取——基本原理结构和应用四辑系列文章之二_第1页
内存直接存取——基本原理结构和应用四辑系列文章之二_第2页
内存直接存取——基本原理结构和应用四辑系列文章之二_第3页
内存直接存取——基本原理结构和应用四辑系列文章之二_第4页
内存直接存取——基本原理结构和应用四辑系列文章之二_第5页
资源描述:

《内存直接存取——基本原理结构和应用四辑系列文章之二》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、内存直接存取——基本原理、结构与应用(四辑系列文章之二)ByDavidKatzandRickGentile,AnalogDevices,Inc.上一辑文章中,我们引入了内存直接存储(DMA)背后的基本知识——人们为什么需要它,它采用何种构造和控制方式。这次,我们将专注于DMA传输的分类,以及与建立这些会话相关的构造DMA的结构目前有两类主要的DMA传输结构。寄存器模式和描述符模式。无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。当DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。在描述符模式中,DMA控制器在内存中查找自己

2、的配置参数。NextDescriptorPointer(lower16bit)下一个描述符的地址NextDescriptorPointer(higher16bit)下一个描述符的地址StartAddress(lower16bit)起始地址(源区或者目标区)StartAddress(higher16bit)起始地址(源区或者目标区)DMAConfiguration控制信息(启用、中断,1Dvs2D)X_Count内循环的传输次数X_Modify内循环的每次传输之间跨越的字节数Y_Count外循环中的传输次数Y_Modify内循环结束和外循环开始之间的字节数表1:DMA寄

3、存器基于寄存器的DMA在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从内存的描述符上载入数据,而内核也不需要保持一个描述符。基于寄存器的DMA包括两种子模式:“自动缓冲模式”和“停止模式”。在自动缓冲DMA中,当一个传输模块传输完毕,控制寄存器就自动重新载入,恢复其最初的设定值,同一个DMA处理器重新启动,开销为零。正如我们在图1中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据内存的缓冲器上,则DMA控制器将会在最后一个字的传输完成的时刻

4、就迅速重新载入初始的参数。这构成了一个“循环缓冲”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个量值将被写入到缓冲器的第一个位置上。Figure1:ImplementingacircularbufferwithAutobufferDMA图1:用DMA实现循环缓冲器图中:Start—起点,End-终点,CircularBuffer——循环缓冲器,AddressIncrements——地址增量,ResetAddress——复位地址。自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输

5、结束时,向内核发出中断。虽然有可能以非突然的方式阻止自动缓冲模式,但如果DMA处理器需要定期启动和停止时,这种工作方式的采用就没有什么实际意义。。让我们先考察一下一个Autobuffer方面的例子。例1试考虑一个这样一个应用:其处理器一次对512个音频采样进行处理,而编码/解码器(音频的A/D变换器)以音频时钟频率发送新的数据。自动缓冲DMA在这种情况下是绝妙的选择,因为数据传输是定期进行的。考虑同一模型,让我们假设我们希望对输入的音频数据进行“双缓冲”。也就是说,我们希望,在我们对某个缓冲器进行处理时,DMA控制器将另一个缓冲器填满数据。处理器必须在DMA控制器回溯

6、到某个特定的数据缓冲器的起始点时结束对该缓冲器数据的处理,正如图2所示的那样。使用自动缓冲器时,配置工作简单易行。图2双缓冲图中:Count——计数,MemoryBuffers——内存缓冲,Peripheralfillsonebuffer——外设将一个缓冲器充满。Interrupt——中断,Processfirst512bytesofbuffer——处理前512个字节的缓冲数据,Processorworksonotherbuffer——处理器对其他缓冲器进行处理,Interrupt——中断,Processsecond512bytesofbuffer——处理另外的512

7、byte的缓冲数据,RegistersreloadandDMAstartsoveragain——寄存器重新载入,DMA再次从头开始。自动缓冲DMA的总计数值必须包含通过2DDMA来实现的两个数据缓冲器的规模。缓冲器的数量对应于外循环。于是,我们让XCOUNT保持为512。假设音频数据元的大小是4bytte,我们就将字传输大小设定为32bit,并让XMODIFY=4。因为我们需要2个缓冲器,我们就将YCOUNT设定为2。如果我们需要两个缓冲器在内存中构成背-背结构,我们必须将YMODIFY设定为1。不过,更明智的办法常常是让缓冲器分隔开。通过这一做法,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。