DMA用来提供在外设和存储器之间或者存储器与存储器之间的高速数据传输,无须CPU干预,通过DMA数据可以快速地移动,如此可以节省CPU资源用于其他操作。
一、STM32外设DMA特性
注意:DMA与Cortex-M3内核共享系统数据线进行DMA数据传输,因此,1个DMA请求占用至少两个周期的CPU访问系统总线时间。为保证Cortex-M3核代码执行的最小宽度,DMA控制器总是在2个连续的DMA请求间释放系统时钟至少1个周期!
但是英文手册原文为:The bus matrix implements round-robin scheduling,thus ensuring at least half of the system bus bandwidth (both to memory and peripheral)for the CPU.
DMA处理过程:
当发生一个事件后,外设发送一个请求信号到DMA控制器,DMA控制器根据通道优先级处理请求信号。当DMA控制器开始访问外设时,DMA控制器发送给外设一个应答信号。当外设送到应答信号后,立马释放请求,一旦释放这个请求,DMA控制器同时终止应答信号。如果发生更多的请求,外设可以启动下次处理。
总之每个DMA有3部分组成:
1.从外设数据寄存器或DMA_CMARx寄存器指定的存储器单元执行加载工作;
2.存储数据到外设数据寄存器或是DMA_CMARx寄