文章目录
DMA
DMA的概念&作用
DMA(Direct Memory Access,直接内存访问) .
DMA既可以指内存和外设直接存取数据这种内存访问的计算机技术,又可以指实现该技术的硬件模块(对于通用计算机PC而言,DMA控制逻辑由CPU和DMA控制接口逻辑芯片共同组成,嵌入式系统的DMA控制器内建在处理器芯片内部,一般称为 DMA控制器,DMAC)。
🤔为啥用到DMA?
在无须CPU干预的情况下,提供外设与存储器之间或者存储器与存储器之间的高速数据传输. 既节省了CPU的资源,又提高数据传输的快速性,因为不需要通过代码实施数据传输过程。👍
如何作用
只要CPU将DMA初始化后,内存和外设的数据传输只需要进过DMA就可以很方便进行(绕开CPU)
STM32 & DMA
例如需要传送100个8位的数据到外设,如果用CPU来做一般是:
for(i=0;i<100;i++) {
数据转移 }
这样CPU要履行100次for循环,如果用DMA方式只要把数据的个数和数据的起始地址给DMA,接着CPU可以执行其他操作了。🤘
STM32单片机可有两个DMA控制器,共12个通道,其中DMA1有7个通道,DMA2有5个通道。 每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。DMA控制器中还有一个仲裁器,专门协调各个DMA请求的优先权。
STM32 (F1) DMA特性🐾
DMA2仅存在于大容量产品和互联型产品
- 每个通道都支持软件触发,可通过软件配置
- 在同一个DMA模块上,多个请求的优先权可以通过软件编程设置
- 共有四级:很高、高、中等和低
- 优先权设置相等时由硬件决定(较低编号的通道比较高编号的通道有较高的优先权,比如通道2优先于通道4)
在大容量产品和互联型产品中,DMA1控制器拥有高于DMA2控制器的优先级
-
独立数据源(取数据的地方)和目标数据区(放数据的地方)的传输宽度有字节(8位)、半字(16位)、全字(32位,字,不是字节)三种可选
- 源和目标地址必须按数据传输宽度对齐
- 支持循环的缓冲器管理—传输完数据又从数据头传输,可反复进行(
参考手册10.3.3
)
-
每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错)
-
这3个事件标志逻辑相“或”成为一个单独的中断请求,即任何一个事件均可触发中断
事件标志位是只读的,使能控制位是可读可写的(所以就是中断之后,只有使能了才能触发中断(?))
-
-
DMA传