赞
踩
在程序中, 如果要实现将一个数据块复制到另外一个数据块时,
常规做法就是将源数据放在 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 的运行状态,
比如传输到一半或者完全传输标志位,其中用到最多的就是传输完成标志,即 TCIFx
和其他外设清除标志位的方式不同,
DMA 要使用单独的标志清除寄存器来清除掉DMA_ISR 寄存器中的对应标志位。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。