- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存直接存取——基本原理、结构与应用
内存直接存取——基本原理、结构与应用(四辑系列文章之二)
By David Katz and Rick Gentile, Analog Devices, Inc.
上一辑文章中,我们引入了内存直接存储(DMA)背后的基本知识——人们为什么需要它,它采用何种构造和控制方式。这次,我们将专注于DMA传输的分类,以及与建立这些会话相关的构造
DMA的结构
目前有两类主要的DMA传输结构。寄存器模式和描述符模式。无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。当DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。在描述符模式中,DMA控制器在内存中查找自己的配置参数。
Next Descriptor Pointer(lower 16bit) 下一个描述符的地址 Next Descriptor Pointer(higher 16bit) 下一个描述符的地址 Start Address(lower 16bit) 起始地址(源区或者目标区) Start Address(higher 16bit) 起始地址(源区或者目标区) DMA Configuration 控制信息(启用、中断,1D vs 2D) X_Count 内循环的传输次数 X_Modify 内循环的每次传输之间跨越的字节数 Y_Count 外循环中的传输次数 Y_Modify 内循环结束和外循环开始之间的字节数
表1:DMA寄存器
基于寄存器的DMA
在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从内存的描述符上载入数据,而内核也不需要保持一个描述符。
基于寄存器的DMA包括两种子模式:“自动缓冲模式”和“停止模式”。在自动缓冲DMA中,当一个传输模块传输完毕,控制寄存器就自动重新载入,恢复其最初的设定值,同一个DMA处理器重新启动,开销为零。
正如我们在图1中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据内存的缓冲器上,则DMA控制器将会在最后一个字的传输完成的时刻就迅速重新载入初始的参数。这构成了一个“循环缓冲”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个量值将被写入到缓冲器的第一个位置上。
Figure 1: Implementing a circular buffer with Autobuffer DMA
图1:用DMA实现循环缓冲器
图中:Start—起点,End-终点,Circular Buffer——循环缓冲器,Address Increments——地址增量,Reset Address——复位地址。
自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输结束时,向内核发出中断。虽然有可能以非突然的方式阻止自动缓冲模式,但如果DMA处理器需要定期启动和停止时,这种工作方式的采用就没有什么实际意义。。
让我们先考察一下一个Autobuffer方面的例子。
例1
试考虑一个这样一个应用:其处理器一次对512个采样进行处理,而编码/解码器 A/D变换器)以音频时钟频率发送新的数据。自动缓冲DMA在这种情况下是绝妙的选择,因为数据传输是定期进行的。
考虑同一模型,让我们假设我们希望对输入的音频数据进行“双缓冲”。也就是说,我们希望,在我们对某个缓冲器进行处理时,DMA控制器将另一个缓冲器填满数据。处理器必须在DMA控制器回溯到某个特定的数据缓冲器的起始点时结束对该缓冲器数据的处理,正如图2所示的那样。使用自动缓冲器时,配置工作简单易行。
图2 双缓冲
图中:Count——计数,Memory Buffers——内存缓冲,Peripheral fills one buffer——外设将一个缓冲器充满。Interrupt——中断,Process first 512 bytes of buffer——处理前512个字节的缓冲数据,Processor works on other buffer——处理器对其他缓冲器进行处理,Interrupt——中断,Process second 512 bytes of buffer——处理另外的512byte的缓冲数据,Registers reload and DMA starts over again——寄存器重新载入,DMA再次从头开始。
自动缓冲DMA的总计数值必须包含通过2D DMA来实现的两个数据缓冲器的规模。缓冲器的数量对应于外循环。于是,我们让XCOUNT保持为512。假设音频
文档评论(0)