1. DMA简介
直接存储器存取(DMA,Direct Memory Access)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,节省CPU资源。DMA传输本质上是一种CPU进行权力下放的方式,将一些本来需要CPU处理的繁琐事务经过交代(配置DMA)之后全权交给DMA控制器处理。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。
在实现DMA传输时,是由DMA控制器直接接管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
2. STM32的DMA架构
STM32有两个DMA控制器,共有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。还有一个仲裁器来协调各个DMA请求的优先权。
2.1 DMA框图
由框图可以看到,DMA1和DMA2、以太网MAC、USB OTG FS均为AHB下的外设(时钟源是AHB),DMA1、DMA2、以太网MAC可以以DMA方式控制总线。其中主要的DMA1和DMA2控制器的DMA请求源均为APB1和APB2下的外设。一旦DMA接管总线,就可以对总线上外设进行数据读取,闪存、SRAM、外设的SRAM、APB1、APB2和AHB外设均可作为访问的源和目标。
2.2 DMA主要特性
- 12个独立的可配置的通道(请求):DMA1有7个通道,DMA2有5个通道每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。
- 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1,依此类推) 。
- 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。
- 支持循环的缓冲器管理
- 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错)&#