DMA是什么?——帮 CPU 跑腿的 DMA

一、DMA业务简单理解

在程序中, 如果要实现将一个数据块复制到另外一个数据块时,
常规做法就是将源数据放在 for 循环当中, 然后一个一个的复制到目标位置。
这里 CPU 就起到了一个“搬运工”的作用,
但是,单纯的搬运工作将会阻塞 CPU,
使得 CPU 重复执行耗时的复制任务,降低了整个系统的实时性,
因此 DMA(Direct Memory Access,直接内存存取) 诞生了。
DMA 就是 CPU的贴身小秘书, CPU 只需要告诉 DMA, 你要去哪取货(源地址),要送到哪(目标地址),
要求的每次运货的货物重量(数据长度, 8/16/32 位) ,要运几次等等。
CPU 给 DMA 分配完任务之后, CPU 就去执行它自己的业务逻辑去了,而 DMA 也开始进行数据的搬运,
这样一来就大大降低了 CPU 的工作负担。

STM32F103 上面最多包含两个 DMA 外设(DMA1 和 DMA2)和 12 个 DMA 通道
(DMA1 包含 7个通道, DMA2 包含 5 个通道) ,
其中 DMA2 仅存在于大容量单片机中。
这里的每个通道就代表着一个数据搬运工,并且为了防止多个搬运工同时进行数据搬运时产生冲突
(多通道共用一个数据总线) ,就又规定了 4 个传输优先级,
分别是很高,高,中等和低, 当优先级相同时通道号小的传输优先级比通道号大的传输优先级要高,
另外, STM32 的 DMA 除了可以在内存中来回搬运数据外,还可以在外设和内存以及内存和外设之间进行数据的传输,
比如我们学习 ADC 章节的时候是通过 CPU 进行数据采集的,
如果使用 DMA 的话,则由 DMA 负责采集ADC 的数据寄存器并将其值存放到我们指定的内存变量当中。

二、DMA 相关的寄存器(主要是四个)

记住名字和对应功能,对应用层面就行了

DMA 中断状态寄存器(DMA_ISR)

这些标志位用于判断此时 DMA 的运行状态,
比如传输到一半或者完全传输标志位,其中用到最多的就是传输完成标志,即 TCIFx

DMA 中断标志清除寄存器(DMA_IFCR)

和其他外设清除标志位的方式不同,
DMA 要使用单独的标志清除寄存器来清除掉DMA_ISR 寄存器中的对应标志位。

DMA 中断标志清除寄存器(DMA_IFCR)

DMA 通道 x 外设地址寄存器(DMA_CPARx)/ DMA 通道 x 存储器地址寄存器(DMA_CMARx)

三、总结(配置 DMA 的步骤)

  1. 设置 DMA 的通道,传输数据数量,传输方向,源/目标地址,源/目标的数据宽度,是否循环传输,并开启 DMA;
  2. 在相应外设中,设置触发 DMA 传输的事件,比如本章是通过定时器发生比较事件时触发 DMA 传输;

DMA是什么?——帮 CPU 跑腿的 DMA相关推荐

  1. axi dma 寄存器配置_「STM32」DMA采集单通道,简单数据分析

    什么是DMA DMA,Direct Memory Access,直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式.在DMA模式下,CPU只需要向DMA控制器下达指令,传输数据由DMA ...

  2. PYNQ开发板使用-使用DMA进行数据搬移(Simple DMA transfer 模式)

    该篇是学习使用PYNQ开发板,实际上是对ZYNQ PL端AXI_CDMA 核的应用.实验步骤参照官网的教程,一步一步地做,但是由于在硬件资源布置方面与官方教程稍有出入,所以在SDK的源码里也进行了修改 ...

  3. 【嵌入式12】DMA通信原理及编程实验,DMA方式向上位机连续发送数据

    本文介绍DMS通信原理,STM32采用串口DMA方式,用115200bps或更高速率向上位机连续发送数据. 一.DMA介绍 什么是DMA? DMA介绍 DMA传输方式 DMA传输参数 DMA数据传输的 ...

  4. 基于设备树的TQ2440 DMA学习(2)—— 简单的DMA传输

    作者 彭东林 pengdonglin137@163.com 平台 TQ2440 Linux-4.9 概述 上一篇博客分析了DMA控制器的寄存器,循序渐进,下面我们直接操作DMA控制器的寄存器实现一个m ...

  5. 基于uniapp校园帮外卖跑腿快递代拿平台设计【还可发布到小程序和HTML5】

    开发软件: Eclipse或者Idea + HbuilderX + Mysql + Redis 开发技术:   uni-app 是一个使用vue的语法 + 微信小程序的标签和API的跨平台前端框架,开 ...

  6. ZYNQ中DMA与AXI4总线-DMA简介

    ZYNQ中DMA与AXI4总线 为什么在ZYNQ中DMA和AXI联系这么密切?通过上面的介绍我们知道ZYNQ中基本是以AXI总线完成相关功能的: 图4‑34 连接 PS 和 PL 的 AXI 互联和接 ...

  7. 直接存储器存取(DMA)有哪3种工作方式?

    DMA是I/0设备与主存储器之间由硬件组成的直接数据通路,用于高速I/0设备与主存之间的成组数据传送.数据传送是在DMA控制器控制下进行的. DMA的3种工作方式如下: (1)CPU暂停方式主机响应D ...

  8. LWN 翻译:DMA-BUF cache handling: Off the DMA API map (part 1)

    声明:本文非原创,只是翻译! 原文:https://lwn.net/Articles/822052/ 作者:John Stultz ( Linaro 成员,kernel timekeeping mai ...

  9. 国产龙芯3A系列CPU + LS2H/LS7A桥片

    如下为龙芯3A系列其中一款4核处理器.以及LS2H/LS7A桥片组成的电脑基本结构图. 一.CPU侧 1)该CPU包含1个NUMA节点(4核处理器龙芯3A系列包含1个NUMA节点,8核处理器龙芯3B系 ...

最新文章

  1. python数字图像处理-图像噪声与去噪算法
  2. 转帖-Linux学习(Find命令使用实例)
  3. mpython 直接访问_如何从python代码中直接访问Android的Service
  4. 成员变量与局部变量的区别
  5. 2020 美国大选在即,又到了 AI 花式打击假新闻的季节
  6. [基础控件]---状态切换控件CompoundButton及其子类CheckBox、RadioButton、ToggleButton、switch事件监听与场景使用...
  7. Manjaro下Opencv4+CMake安装和编译指南(完整版)
  8. vue 微信分享至朋友圈分享至朋友代码封装
  9. WAP技术与网站建立(转)
  10. RV-LINK:用RISC-V开发板做RISC-V仿真器
  11. Google地图删除marker标点
  12. K8S查看服务器日志
  13. java.lang.RuntimeException: A TaskDescription‘s primary color should be opaque
  14. 我参加 NVIDIA Sky Hackathon---语音识别+前端设计
  15. python二级第十二套答案
  16. R语言建模收入不平等:分布函数拟合及洛伦兹曲线(Lorenz curve)
  17. 根据慕课网Daisy老师教程写的 爱心鱼 网页小游戏
  18. 什么是CS寄存器,什么是IP寄存器
  19. 重新定义容器化 Serverless 应用的数据访问
  20. vue修改图片后实时更新

热门文章

  1. Arduino基础篇(四)-- 如何玩转Arduino的PWM
  2. 前沿AI技术体验:从文字直接产生图片,结果真的震撼! 非常有意思!
  3. 理解Spark中RDD(Resilient Distributed Dataset)
  4. 最优化方法及其matlab程序设计马昌凤,《马昌凤-最优化方法及其Matlab程序设计》.pdf...
  5. win7亮度显示条消失了
  6. w7桌面计算机回收站不见了,Win7回收站图标没了怎么恢复?
  7. 盘点天龙历史:七年以来所有资料片
  8. php评论盖楼怎么实现,dedecms评论盖楼实现楼层数,类似腾讯、网易的评论(5.5/5.6版)...
  9. 傻瓜式做法,最简单的短视频玩法
  10. Android-Binder及AIDL基础分析