控制器

DMA1和DMA2两个, 1有7通道, 2有5通道。 每个控制器同一时刻只能接收一个通道。
DMA2可以执行存储器到存储器的传输

使用的寄存器

SxCR(CCR): 通道控制.
DMA_SxPAR(DMA_CPAR): DMA外设地址. 从此地址读/写外设数据。
DMA_SxM0AR(DMA_CMAR): DMA内存地址。从此地址读/写外设数据。
DMA_SxM1AR: 双缓冲模式时DMA的另一个地址
DMA_NDTR: 计数器,在存储后递减。

仲裁

管理DMA请求的优先级,四级。

  1. 在DMA_CCRx设置优先级
  2. 若优先级一样则以通道编号排序, 编号低的优先

DMA数据流

  • 常规类型事务
  • 双缓冲区类型事务:使用存储器的两个存储器指针的双缓冲区传输(当 DMA 正在进行自/至缓冲区的读/写操作时,应用程序可以进行至/自其它缓冲区的写/读操作)

CCR

DIR: 配置传输方向。 存储器<->外设 或 存储器<->存储器
PINC/MINC: 配置每次传输后指针是否自增
PSIZE/MSIZE: 存储器或外设的存储宽度。在配置PINC/MINC后根据这个大小决定自增多少地址:1(一字节)/2(半个字)/4(一个字)
PINCOS
CIRC:使能循环模式
DBM: 使能双缓冲模式

循环模式

每次传输完成后不触发中断,适合adc采集。
或许不适合帧传输

双缓冲模式

开启双缓冲时自动开启循环模式
DMA控制器轮流向两个存储器存数据。