什么是DMA?
DMA(Direct Memory Access
,直接存储器访问
)
提供在
外设与内存
、
存储器和存储器
、
外设
与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,它允许数据在不经过中央处理单元(CPU)的情况下,在内存和外设之间直接进行传输。DMA的目的是提高数据传输的效率,减轻CPU的负担,使CPU能够在数据传输过程中执行其他任务。
在没有DMA的情况下,数据传输通常是由CPU负责的。CPU从一个设备读取数据,然后将数据写入另一个设备,这个过程需要CPU的介入和处理。而使用DMA时,CPU只需要配置好DMA控制器,然后可以继续执行其他任务,而数据的传输由DMA控制器直接管理。
DMA的主要特点包括:
-
减轻CPU负担: DMA允许数据在外设和内存之间直接传输,无需CPU的干预。这样,CPU可以在数据传输过程中执行其他任务。
-
提高数据传输速度: 由于没有CPU的介入,DMA可以更高效地管理数据传输,从而提高传输速度。
-
适用于大量数据传输: DMA特别适用于需要大量数据传输的场景,例如图形处理、音频处理、网络通信等。
-
降低能耗: 由于CPU在数据传输过程中可以进入低功耗状态,使用DMA可以降低系统的能耗。
在嵌入式系统和实时系统中,DMA常用于高性能的数据传输,例如音频、视频处理、网络数据传输等。 DMA通常由硬件支持,并且在操作系统和编程库中提供相应的API供开发者使用。
简单描述:
就是一个数据搬运工!!
搬运什么数据?
存储器、外设
这里的外设指的是
spi
、
usart
、
iic
、
adc
等基于
APB1
、
APB2
或
AHB
时钟的外设,而这里的存
储器包括自身的闪存
(flash)
或者内存
(SRAM)
以及外设的存储设备都可以作为访问地源或者目
的
DMA 控制器
STM32F103有2个 DMA 控制器,DMA1有7个通道,DMA2有5个通道。
一个通道每次只能搬运一个外设的数据!!
如果同时有多个外设的
DMA
请求,则按照优先级进
行响应。
?DMA2有5个通道:
DMA及通道的优先级
优先级管理采用软件
+
硬件:
- 软件: 每个通道的优先级可以在DMA_CCRx寄存器中设置,有4个等级
? ? ? ? ? ? ? ? ? 最高级>高级>
中级
>
低级
- 硬件: 如果2个请求,它们的软件优先级相同,则较低编号的通道比较高编号的通道有较高的优先权。
???????????????????比如:如果软件优先级相同,通道2优先于通道4
?
DMA传输方式
一次
DMA
数据传输完后,停止
DMA
传送 ,也就是只传输一次
- DMA_Mode_Circular(循环传输模式)
当传输结束时,硬件自动会将传输数据量寄存器进行重装,进行下一轮的数据传输。 也就是
多次传输模式
指针递增模式
外设和存储器指针在每次传输后可以自动向后递增或保持常量。当设置为增量模式时,下一个要
传输的地址将是前一个地址加上增量值。