一直没有好好的捣鼓过DMA,在调BLE项目的时候,遇到了DMA串口传输的问题,伤心流涕甚长时间!!!
DMA 网上的解释一大堆,简单总结一下:
DMA 处理过程全部是由硬件来实现的,速度很快!
DMA 在专门的DMA控制下,实现高速外设与主存储期之间自动成批量的数据交换。
通常有两种交换方式:1 独占总线方式 2 周期挪用方式
DMA 传送过程
DMA 预处理
DMA 数据传送
DMA 结束处理 将总线控制权交换给CPU
DMA 内部寄存器
地址寄存器 : 存放DMA传输是储存单元地址
字节寄存器 : 存放DMA 传输字节数
控制寄存器 : 存放CPU 设定的DMA传输方式
状态寄存器 : 存放DMAC当前的状态
DMA 外设地址 : 基地址 + 偏移地址
两种方法设定地址:
#define USART1_DR_Base 0x40013804
#define USART1_DR_Base (&(USART1->DR))