转载于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. 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结

    前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...

  2. ng-class的几种用法

    参考来自 https://www.cnblogs.com/zhoulin1234/p/9587955.html 方法1.逻辑在后面的中括号里面 ng-class="{true : 'chec ...

  3. [深度学习] pytorch利用Datasets和DataLoader读取数据

    本文简单描述如果自定义dataset,代码并未经过测试(只是说明思路),为半伪代码.所有逻辑需按自己需求另外实现: 一.分析DataLoader train_loader = DataLoader( ...

  4. BZOJ 5084: hashit 后缀自动机(原理题)

    比较考验对后缀自动机构建过程的理解. 之前看题解写的都是树链的并,但是想了想好像可以直接撤销,复杂度是线性的. 自己想出来的,感觉后缀自动机的题应该不太能难倒我~ 注意:一定要手画一下后缀自动机的构建 ...

  5. BZOJ 3173: [Tjoi2013]最长上升子序列 Splay

    一眼切~ 重点是按照 $1$~$n$ 的顺序插入每一个数,这样的话就简单了. #include <cstdio> #include <algorithm> #define N ...

  6. Windows:在特定路径下启动命令行

    造冰箱的大熊猫,本文适用于Windows 7@cnblogs 2018/11/30 在Windows文件浏览器中,按下“Shift+鼠标右键”,点击“在此处打开命令窗口”.

  7. ​直接插入排序(Straight Insertion Sort)

    1.定义 直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表. 插入排序(Insertion Sort ...

  8. Spring Data JPA的Respository接口中查询方法

  9. Ruby的异常处理

    Ruby在处理0.1+0.2是会出现精度问题: 许多语言都有类似问题,详见网址:http://0.30000000000000004.com/ Ruby的异常处理 如果异常处理范围是整个方法体,可以省 ...

  10. your current language level is ecmascript 5

    https://stackoverflow.com/questions/32995066/how-can-i-configure-resharpers-language-level-for-ecmas ...