单片机DMA原理

1、DMA的基本概念

1.1、DMA是什么?

DMA的定义/基本概念:
DMA,全称Direct Memory Access,即直接存储器访问。
DMA是一种外设,它将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。—>只要配置好就主动利用总线将 源数据存储器 中的数据搬运到 目标数据存储器
主设备和从设备的概念:
单片机的内部设备都挂接在总线矩阵上,能够取得总线控制权,寻址并主动给对应地址存储器写入或读取数据的叫主设备、只能被动的被主设备写入或读取的设备叫从设备。—>DMA是一种主设备,CPU也是一种主设备

1.2、为什么要用DMA?

我们知道CPU有转移数据、计算、控制程序转移等很多功能,系统运作的核心就是CPU。
CPU无时不刻的在处理着大量的事务,但有些事情却没有那么重要,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,是不是能够更好的利用CPU的资源呢?
因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理---->这就是DMA

2、DMA的工作原理_STM32F1系列为例

下图是我截取的STM32的DMA控制器的功能框图以及我根据数据手册和个人理解画的功能流程图,以此来解释DMA控制器是如何工作的:
DMA框图
在这里插入图片描述
(1)相关功能寄存器介绍
每一个通道都对应了一个DMA_CCRx、DMA_CNDTRx、DMA_CPARx和DMA_CMARx—>DMA1七个通道,上述每种寄存器都有7个
DMA_CCRx—>配置通道工作模式、通道优先级、存储器数据宽度、外设数据宽度,数据的搬运(传输)方向、存储器/外设地址增量模式、通道开启使能、中断使能配置
DMA_CNDTRx—>用来配置通过通道传输的字节数目,当其中的值变为0,则传输结束—>只能在通道不工作时写入值。
DMA_CPARx—>用来配置通过通道传输数据的外设数据寄存器的首地址
DMA_CMARx—>用来配置通过通道传输的存储器的首地址
DMA_ISR—>中断状态寄存器,每一位代表对应通道传输中断事件触发标志,不需要配置,当通道电路在传输过程中发生状况,自动将某些位置1,它和DMA_CCRx的中断使能位共同作用,打开DMA中断—>通道x传输错误标志、半传输标志、传输完成标志、全局中断标志
DMA_IFCR—>中断标志清除寄存器,配置相应位来清除DMA_ISR中的中断标志
(2)DMA工作原理/流程
1、外设DMA请求过来后,DMA控制器判断是哪个通道的请求
2、确认是哪个通道的请求后,仲裁器按设定好的优先级按顺序处理各通道的DMA请求
3、通道x搬运数据时,会按照寄存器配置的搬运方向、存储器数据宽度、外设数据宽度,把数据从外设寄存器地址(存储器地址)搬运到存储器地址(外设寄存器地址)—>外设寄存器地址和存储器地址通过通道x外设地址寄存器和通道x存储器地址寄存器设置
4、每搬运一次设定数据宽度的数据,通道x传输数据数量寄存器的值减1或者增加1,如果该寄存器中的值减小到0或增加到设定值,那么这次DMA请求的搬运数据就结束了(可以设置为循环模式)
**注意事项:**这个过程除了配置相关寄存器有CPU参与外,后续的DMA搬运数据的过程时硬件自己按设置完成的,没有CPU的参与

以下是STM32的DMA1各通道请求来源外设:
STM32有两个DMA,DMA2只有5个通道,DMA17个通道。
在这里插入图片描述

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值