转载于http://blog.csdn.net/peasant_lee/article/details/5594753

  

  DMA一种高速的数据传输操作,允许在外部设备和存储器之间直接读写数据,不需要CPU干预。整个数据传输在DMA控制器控制下进行。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。

通常,DMA控制器有多个通道,有独立的请求和中断,独立可编程的源地址、目标地址和传输数目。可以将FLASH、SRAM、外SRAM、和其他外设作为源或目标

完整的DMA传输过程如下:

  1.DMA请求 CPU对DMA控制器初始化

  2.DMA响应CPU执行完当前总线周期即可释放总线控制权。

  3.DMA传输 DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作。

  4.DMA结束 当完成规定的成批数据传送后,DMA控制器即释放总线控制权。

注意到上面的一句话 “在大部分时间里,CPU和输入输出都处于并行操作”。并不是全部。 在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。通常有如下三种方式: 停止CPU访问、周期挪用方式、DMA与CPU交替访问。

STM32的DMA控制器执行直接存储器数据传输时和Cortex-M3核共享系统数据线。因此,1个DMA请求使得CPU停止访问系统总线的时间至少2个周期。为了保证Cortex-M3核的代码执行的最小带宽,在2个连续的DMA请求之间,DMA控制器必须释放系统总线至少1个周期。STM32内部有一个总线矩阵,协调着CPU和DMA到SRAM、内存和外设的访问。而DSP的DMA拥有独立的DMA总线。通用CPU中的总线是共享的,DMA使用了总线则CPU就要等待,而DSP中的DMA使用独立的DMA总线通路,可以和CPU core并发操作。

大多数带内部 DMA 控制器的器件都有总线矩阵,多个总线主设备和从设备可以在同一时间经由互不干扰的链路进行数据传输。当然,这也需要在软件设计时进行充分的考虑,尽量规避总线冲突的发生可能性,因为这个冲突检测/总线切换在很多器件上是硬件逻辑实现的,一旦实际发生冲突,软件能做的事情往往不太多(部分器件会有相应的内部外设中断)

因此如果软件没有合理规划的话,系统的性能就会极大下降,而且实时性也无法保证。

目前来说,如果是 ARM9 或者更高的处理器,则通过 Linux 内核就可以做到至少 70% 的必须由软件完成的调控工作(但如果用户软件和用户专有驱动硬是要跟器件对着干,那也没用),不过如果是 CM3 一类半高阶器件,就得纯靠自己了

DMA技术的弊端:

因为DMA允许外设直接访问内存,从而形成对总线的独占。这在实时性强的硬实时系统的嵌入式开发中将会造成中断延时过长。这在实时性要求高的系统中,要注意了。

最新文章

  1. 『AngularJS』$location 服务
  2. Reactor模式通俗解释
  3. 解决:jmeter查看结果树的响应数据提示超过最大值Response too large to be displayed
  4. html/css基础篇——DOM中关于脱离文档流的几种情况分析
  5. 【工具】清理Windows Installer冗余文件(支持64位NT6.x系统)
  6. C# 解压zip压缩文件
  7. Linux下复制粘贴快捷键
  8. (转)Hadoop之常见错误集锦
  9. 学习笔记TF034:实现Word2Vec
  10. 使用jdbc调用存储,函数
  11. 【iOS】Swift if let 和 if var
  12. 简单配置,让ES6脚本在浏览器里飞
  13. Introduction of filter in servlet
  14. Mirror--如何在主库上增加文件
  15. java并发--CountDownLatch、CyclicBarrier和Semaphore
  16. C语言控制台窗体图形界面编程(八):鼠标事件
  17. win32绘制自定义类窗口导致绘制11个窗口的解决办法
  18. iOS应用内付费(IAP)开发步骤
  19. ansible管理window
  20. 2015年Ubuntu最新Redmine的安装和配置

热门文章

  1. eclipse从SVN中检出web项目
  2. Vue -- mounted方法中调用methods的方法(并取出mounted方法中回调函数的值)
  3. 针对windows10 10.4号升级后VMware低版本不能使用的问题
  4. js 引号 转义字符 json字符串
  5. jquery pageY属性 语法
  6. Windows Server 快速生成免费SSL证书 (letsencrypt)
  7. C语言 - strcmp和strncmp的编程实现及总结
  8. CSP2019-S2参赛总结 暨 近期学习反思
  9. 使用Qt Designer进行布局
  10. Unity3D_(游戏)2D简单游戏制作过程:捕获高空掉落保龄球