DMA简介
Data Memory Access 直接存储器访问,主要功能把一个数据从一个地方搬运到另一个地方,不占用CPU
DMA1有7个通道,DMA2有5个通道,可以实现M -> M M->P P->M 之间的数据搬运
DMA功能框图
1、DMA请求
DMA请求由外设产生,一般需要开启外设的DMA请求
2、通道
当DMA的传输方向是 M->M的时候,所有的通道都是可以用的,没有限制。
当DMA的传输方向是其他情况时,就要按照各个通道连接的外设进行选择。
3、仲裁器
在stm32中通过配置DMA_CCR寄存器的PL位能设置通道的优先级。
- 当使用同一个通道时,通道编号小的优先级高。
- 当使用不同的DMA时,如果优先级相同,DMA1的优先级高于DMA2。
DMA结构体
DMA结构体主要分为两部分
第一部分:数据从哪里来,要到哪里去
前三个用来确定,数据从哪里来,要到哪里去。数据来源的地址分别存放在外设地址寄存器和存储器地址寄存器。
如果采用M->M的方式,则需要另外配置寄存器:启动存储器到存储器模式。
数据传输方向:有CCR寄存器的DIR位来配置,可以是从存储器读或从外设读。
第二部分:数据要传多少,传输的单位是什么
1、传输数目:控制传输数据寄存器,32位的,只有低16位有效。
2和3、地址增量模式:判断是否要地址递增。由CCR寄存器MINC和PINC配置。如果说是外设,因为只有一个寄存器,地址无法递增。如果是Flash或者SRAM中的数据,一般是数组,这是就必须地址递增。因为数组传送完当前数据之后,一定要指针下移,传输别的数据。
4和5、数据宽度:就是一次传输多少位。由CCR寄存器的PSIZE和MSIZE决定。
(当存储器和外设数据宽度不一样时,会在成数据丢失)
第三部分,什么时候传输结束
模式选择:配置的CCR寄存器的CIRC,是否启用循环模式。