DMA简介
DMA,全称为:Direct Memory Access,即直接存储器访问。
DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
DMA功能框图和特性
- 5个独立的可配置通道,每个通道都直接连接专用的硬件DMA请求;
- 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:超高、高、中、低);
- 独立数据 源和目标 数据区的传输宽度(字节、半字节、全字)源和目标 地址必须按数据宽度对齐;
- 支持循环的缓冲器管理;
- 每个通道有3个事件标志(DMA版传输、DMA传输完成和DMA传输出错);
- 存储器和存储器间的传输;
- 外设到存储器和存储器到外设,外设到外设间的传输;
- 闪存、SRAM、APB、AHB外设均可作为访问的 源和目标;
- 可编程的数据传输数目:最大为65536
STM32F0-DMA通道
注:可修改SYSCFG_CFGR1来配置通道的映射关系。
DMA通道优先级
仲裁器根据优先级管理着通道的请求和启动外设 / 存储器的访问;
优先级管理分两个方面:
软件方面:可通过DMA_CCRX寄存器配置每个通道的优先级,优先级分为4各等级:
最高等级;
高优先级;
中等优先级;
低优先级;
硬件方面:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。例如:通道2优先于通道4.
STM32F0-DMA传输
DMA增量设置
- 通过设置DMA_CCRx寄存器中的PINC和MINC标志位,外设和存储器的指针在每次传输后可以有选择的完成自动增量
- 当设置为增量模式时,下一个要传输的地址将是签一个地址加上增量值,增量值取决于所选的数据宽度为1、2或4。
DMA循环模式
- 循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。在DMA_CCRx寄存器中的CIRC位用于开启这一功能。
- 当启动了循环模式,一组的数据传输完成时,计数寄存器将会自动的被恢复成配置该通道是设置的初值,DMA操作将会继续进行。
STM32F0-DMA中断
每一个DMA通道都可以在DMA传输过半、传输完成和传输出错时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。
注:这些标志位都在中断状态寄存器DMA_ISR中设置