DMA介绍、原理、工作模式-程序员宅基地

技术标签: 硬件工程  嵌入式硬件  

写在前面:个人学习总结,小白,不喜勿喷,欢迎指正。

1、什么是DMA

DMA,全称Direct Memory Access,直接存储器访问。DMA将数据从一个内存地址复制到另一个内存地址的操作,当然不仅仅局限于内存到内存,也可以外设和内存之间相互访问。

那么DMA进行数据的搬移和普通通信方式(IIC、SPI)想比区别在哪,普通通信方式IIC或者SPI或多或少的到需要CPU的参与,CPU控制收发、读写,而DMA在进行数据传输的时候不需要CPU参与,因此大大降低了CPU的工作量

2、DMA的传输方式

分为四种情况,外设到内存、内存到外设、内存到内存、外设到外设。DMA传输有专门的传输通道,以STM32为例

        如图所示,DMA1和DMA2,其中DMA1有7条通道,DMA2有5条通道。每个通道对应不同的外设DMA请求,并且每个通道可能可以接收多个外设的请求,但是在同一时间只能接收一个DMA请求,不能接收多个请求。如果外设想通过DMA传输数据,必须先给DMA控制器发送请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设接到应答信号后,才会启动DAM传输。

3、 仲裁器

        在某一时刻,DMA控制器可能会接收到多个DAM请求,那么控制器先响应谁后响应谁是怎么规定的?这就引入一个新的概念:仲裁器。

 

        仲裁器管理DMA请求分为两个阶段:软件阶段和硬件阶段。

软件阶段可以通过寄存器(DMA_CCRx)设置等级:非常高、高、中、低四个等级。

硬件阶段优先级不可更改:如果两个DMA通道等级在软件阶段设置的一样,比如都为高,那么在硬件阶段优先级取决于通道编号,编号越低优先级越高(通道1大于通道2 类推),如果有两个DAM(例如32ZET6),那么DMA1大于DMA2。

4、DMA传输方式

共有两种传输模式:正常模式(其实就是单次传输)、循环传输模式(重新装载数据多次)。

正常模式(Normal):当设置好DMA源地址、目标地址、传输方向,数据量时,DMA一次将需要发送的数据全部发送过去。

循环传输模式(Circular):当一次数据传输结束后,重新装载数据,再次开始传输,知道数据传输完成。

5、DMA中断

        每个DMA通道都可以在DMA传输过半、传输完成和传输错误时产生中断,中断可以通过寄存器配置打开。

 则在DMA传输过程中,可以通过对DMA中断位查询来获得DMA传输状态。

6、DMA配置

        DAM请求通过之后,DMA开始传输之前,还需要了解:数据从哪里来(源地址)、到哪里去(目标地址)?以ADC采集数据为例,那源地址就是ADC的数据寄存器地址,目标地址就是我们自己定义的变量,可以是flash,SRAM,也可以是我们自己定义的临时区间RAM。要传输多少数据?传输数据的单位是什么(数据宽度8位、16位?)?传输多少次?设置好传输数据位宽,数据量,传输模式。当这些设定好之后就可以开始传输,我们可以利用中断传输,当传输次数达到设定值或者剩余传输数据量为0就停止传输。

以STM32为例:

 

 

注意事项:

1、地址的自增,因为数据传输地址可能不是固定的,比如ADC数据到内存,那么从ADC中获取数据的地址是固定的,但是目标内存的地址要自增,不然下次DAM传输的数据就会覆盖掉之前的数据。

2、DMA进行数据的传输是需要总线的,因此总线在DMA工作时是分时复用的。比如1时刻ARM正在正常运行,此时CPU占用总线;2时刻,DAM控制器接收到DMA请求,开始DAM传输,此时CPU释放总线,DAM占用总线进行传输;3DMA传输完成,释放总线,此时CPU重新获取总线。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_48943109/article/details/132499254

智能推荐

浅解比SQL更好用的SPL(二)-程序员宅基地

文章浏览阅读118次。从 SQL 到SPL基本查询语法迁移之多表操作上一篇我们针对单表的情形了解了如何把数据计算从 SQL 查询迁移到集算器,或者更准确地说,迁移到集算器所使用的SPL集算语言。这个迁移过程,既有相同的概念,也有不同的思路。接下来,我们一起针对多表的情况看一下集算器和SPL语言是如何发挥更大的..._sql常用比if更好用

国科大高级人工智能10-强化学习(多臂赌博机、贝尔曼)_国科大 强化学习-程序员宅基地

文章浏览阅读1.5k次。文章目录多臂赌博机Multi-armed bandit(无状态)马尔科夫决策过程MDP(markov decision process1.动态规划蒙特卡罗方法——不知道环境完整模型情况下2.1 on-policy蒙特卡罗2.2 off-policy蒙特卡罗时序差分方法强化学习:Reinforcement learning目标:学习从环境状态到行为的映射,智能体选择能够获得环境最大奖赏的行为..._国科大 强化学习

如何用 Visual studio 2003/2005 调试 ASP 应用程序、Javascript 代码(转)_visual studio 2003 asp 远程调试-程序员宅基地

文章浏览阅读1k次。如何用 Visual studio 2003/2005 调试 ASP 应用程序、Javascript 代码 在vs2005中调试ASP网站的错误信息:无法提供此类型的页。说明: 由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.asp”可能不正确。 请检查以下的 URL 并确保其拼写正确。 怎么解决这个问题呢?请看下文。 ASP.NET 已经很_visual studio 2003 asp 远程调试

MMO即时战斗:地图角色同步管理和防作弊实现_mmo城镇同步-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏29次。一、前言 无论是端游、页游、手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动、释放技能、战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置、以及角色身上的装备、时装、buffer等状态的实时切换。同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的,解决同步问题的最简单的方法就是把每个玩家的_mmo城镇同步

Android Studio JNI代码突然无法跳转_android studio jni 类无法自动跳转-程序员宅基地

文章浏览阅读4.5k次。Android Studio JNI代码突然无法跳转AndroidStudio3.2 + gradle 4.6 下突然无法是用 ctrl + 左键 跳转代码。选中代码点击时出现 “Cannot find declaration to go to” 提示. 经过了换 SDK 后比对发现,如果JNI 代码出现这个问题,一般就是 CMake 版本不对。我换成3.6.xxx就好用了。3.10.xxx不知..._android studio jni 类无法自动跳转

【集成学习-组队学习】3.优化基础模型_模型选择 逐步法-程序员宅基地

文章浏览阅读216次。优化基础模型在回归问题的基本算法中,我们使用数据集去估计模型的参数,如线性回归模型中的参数w,那么这个数据集我们称为训练数据集,简称训练集。我们在回归问题中使用训练集估计模型的参数的原则一般都是使得我们的损失函数在训练集达到最小值,其实在实际问题中我们是可以让损失函数在训练集最小化为0,如:在线性回归中,我加入非常多的高次项,使得我们模型在训练集的每一个数据点都恰好位于曲线上,那这时候模型在训练集的损失值也就是误差为0。那么这样我们的模型是否就可以预测任意情况呢?答案是显然否定的。我们建立机器学习_模型选择 逐步法

随便推点

单片机控制PCB板设计的原则和细节说明_单片机下面能不能走线-程序员宅基地

文章浏览阅读679次。设计电路板最基本的过程可以分为三大步骤:电路原理图的设计,产生网络表,印制电路板的设计。不管是板上的器件布局还是走线等等都有着具体的要求。例如,输入输出走线应尽量避免平行,以免产生干扰。两信号线平行走线必要是应加地线隔离,两相邻层布线要尽量互相垂直,平行容易产生寄生耦合。电源与地线应尽量分在两层互相垂直。线宽方面,对数字电路PCB可用宽的地线做一回路,即构成一地网(模拟电路不能这样使用),用大面..._单片机下面能不能走线

携职教育:“涉税信息查询结果告知书”如何查询?_涉税信息告知书-程序员宅基地

文章浏览阅读313次。通过电子税务局【我要办税】—【其他服务事项】—【纳税人涉税信息查询申请】功能申请,待受理通过后,在【我要办税】—【其他服务事项】—【其他涉税事项】—【文书打印】打印涉税信息查询结果。我要查询“涉税信息查询结果告知书”,如何操作?二、其他服务事项—纳税人涉税信息查询申请。二、其他服务事项—其他涉税事项—文书打印。一、我要办税—其他服务事项。一、我要办税—其他服务事项。_涉税信息告知书

Android开发之实现搜索框搜索_android搜索框功能实现-程序员宅基地

文章浏览阅读1.6w次,点赞21次,收藏180次。最近自己在尝试做app开发,遇到搜索框功能,便查找了一下但是感觉自己想的或许更好理解和记住,便自己思考了一下。废话不多说,下面是实现代码,供大家参考,有待改进。先说一下我整体思路,因为刚开始写所以相关数据都没有上传服务器过。首先建立一个数据库,将可以搜索的相关内容存储到数据库当中,然后在搜索框中获取输入的第一个字符,..._android搜索框功能实现

【Java虚拟机】JVM垃圾回收机制和常见回收算法原理-程序员宅基地

文章浏览阅读1.8k次,点赞14次,收藏17次。JVM垃圾回收机制和常见回收算法原理_垃圾回收机制

全栈混合云综合架构方案研究和落地_混合云管纳管双活资源池-程序员宅基地

文章浏览阅读493次。经过一年多团队的刻苦攻坚,目前全栈混合云1.0版本的方案已经落地多个场景,包括(政务云,一城一池,企业云,能源云)等多个场景,已经有超过近百个客户的实践经验,未来全栈混合云将从“可纳管”到“智能纳管”全面迭代,整体架构将想云原生的方向进行全面转化。主要部署全栈混合云管理平台,全部采用虚机/容器化部署模式,包括前台web组件, 中台Java组件, 后台的混合云适配组件,缓存Redis组件,RabbitMQ 组件和数据库PXC集群组件等,每个组件采用多活的方式,对外提供服务,降低单点故障。_混合云管纳管双活资源池

【解决windows install问题】如找不到vc_runtimeMinimum_x86.msi,如强制删除软件方法-程序员宅基地

文章浏览阅读169次。其中卸载软件可能卸载不掉,用下面这个软件进行卸载(万能)_vc_runtimeminimum_x86