转载于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允许外设直接访问内存,从而形成对总线的独占。这在实时性强的硬实时系统的嵌入式开发中将会造成中断延时过长。这在实时性要求高的系统中,要注意了。

DMA(Direct Memory Access直接存储器访问)总结的更多相关文章

  1. (转)DMA(Direct Memory Access)

    DMA(Direct Memory Access) DMA(Direct Memory Access)即直接存储器存取,是一种快速传送数据的机制. 工作原理 DMA是指外部设备不通过CPU而直接与系统 ...

  2. DMA(direct memory access)直接内存访问

    DMA(Direct Memory Access),这里的 memory,指的是计算机的内存,自然与外存(storage)相对.这里的关键词在 Direct (直接),与传统的相对低效的,需要通过 C ...

  3. DMA(Direct Memory Access)简介

    什么是DMA(Direct Memory Access) DMA绕过CPU,在内存和外设之间开辟了一条 "隧道" ,直接控制内存与外设之间的操作,并完全由硬件控制. 这样数据传送不 ...

  4. [中英对照]Introduction to Remote Direct Memory Access (RDMA) | RDMA概述

    前言: 什么是RDMA? 简单来说,RDMA就是指不通过操作系统(OS)内核以及TCP/IP协议栈在网络上传输数据,因此延迟(latency)非常低,CPU消耗非常少. 下面给出一篇简单介绍RDMA的 ...

  5. 直接存储器存取(Direct Memory Access,DMA)详细讲解

    一.理论理解部分. 1.直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输. 2.无须CPU干预,数据可以通过DMA快速移动,这就节省了CPU的资源来做其他操作. ...

  6. Remote Direct Memory Access (RDMA)

    RDMA有三类实现方式,包括RoCE,iWARP和InfiniBand.RDMA的基础是Virtual Interface Architechure (VIA). 参考文档: https://en.w ...

  7. DMA—直接存储器访问

    DMA 简介 DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候,CPU 可以干其他的事情,好 ...

  8. DMA (直接存储器访问)

    DMA (直接存储器访问) 编辑 DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载.否 ...

  9. numactl 修改 非统一内存访问架构 NUMA(Non Uniform Memory Access Architecture)模式

    当今数据计算领域的主要应用程序和模型可大致分为三大类: (1)联机事务处理(OLTP). (2)决策支持系统(DSS) (3)企业信息通讯(BusinessCommunications) 上述三类系统 ...

随机推荐

  1. C# 各个版本特性总结

    历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECM ...

  2. 前端面试题-CSS优先级

    一.选择器优先级 浏览器通过优先级来判断哪一些属性值与一个元素最为相关,从而在该元素上应用这些属性值.优先级是基于不同种类选择器组成的匹配规则. 二.优先级计算 优先级就是分配给指定的CSS声明的一个 ...

  3. shell知识点(一)

    Shell1.概述Shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核还是一个功能相当强大的编程语言,易编写.易调试.灵活性强2.shell解析器查看linux提供的shell ...

  4. vue iOS上传图片file 出错

    前言 用vue 移动端上传图片在低版本的 ios 手机上 图片转换base64 在转换file 文件类型 会报错 并且报错 “Script Error ” 查阅了github 和一些文档发现 可以吧 ...

  5. myleecode

    目录 # myleecode 1.冒泡排序 2.快速排序 3.进度条打印 4.打印 九九乘法表 5.打印 金字塔 6.接雨滴 7.一行代码实现1-100个数相加 8.如何在不使用内置方法强制转换的情况 ...

  6. Flask之请求上下文流程图

    整理一下Flask请求上下文流程导思流程图,如果错误,请指出.

  7. js 数组的forEach 函数

    var numbers = [4, 9, 16, 25]; function myFunction(item, index) { console.log("item:" + ite ...

  8. ubuntu+tomcat+jenkins+git+maven

    1.下载tomcat.jdk和jenkins.war (下面通过wget下载的jdk-8u231-linux-x64.tar.gz不能用,需要本地下载后上传到服务器)解决Linux上解压jdk报错gz ...

  9. 让IE8一下兼容CSS3选择器

    来自英国的网页开发工程师Keith Clark 开发了一个JavaScript方案来使IE支持CSS3选择器.该脚本支持从IE5到IE8的各个版本. 首先,您需要下载DOMAssistant脚本和ie ...

  10. Clojure的引用类型:var,ref,agent和atom

    作为其他值的容器,也都可以解引用. deref不会阻塞. add-watch (add-watch reference key fn) 可以定义引用值发生改变时的回调,fn是4个参数 :key (at ...