DMA简介
DMA(Direct Memory Access)—直接存储器存取, 是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU, 即在传输数据的时候, CPU 可以干其他的事情,好像是多线程一样。 数据传输支持从外设到存储器(P->M)或者存储器到存储器(M->M),这里的存储器可以是 SRAM 或者是 FLASH。 DMA 控制器包含了 DMA1 和 DMA2, 其中 DMA1 有 7 个通道,DMA2 有 5 个通道, 这里的通道可以理解为传输数据的一种管道。要注意的是 DMA2 只存在于大容量的单片机
DMA功能框图讲解
DMA请求
如果外设要想通过 DMA 来传输数据,必须先给 DMA 控制器发送 DMA 请求, DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且 DMA 控制器收到应答信号之后,就会启动 DMA 的传输,直到传输完毕。
其中 ADC3、 SDIO 和 TIM8 的 DMA 请求只在大容量产品中存在,这个在具体项目时要注意 。
通道
DMA 具有 12 个独立可编程的通道,其中 DMA1 有 7 个通道, DMA2 有 5 个通道,每个通道对应不同的外设的 DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。
仲裁器
当发生多个 DMA 通道请求时, 就意味着有先后响应处理的顺序问题,这个就由仲裁器也管理。 仲裁器管理 DMA 通道请求分为两个阶段。第一阶段属于软件阶段, 可以在DMA_CCRx 寄存器中设置,有 4 个等级:非常高、高、中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的 DMA 通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高, 比如通道 0 高于通道 1。 在大容量产品和互联型产品中,DMA1 控制器拥有高于 DMA2 控制器的优先级 。
初始化结构体
传输数目
数据宽度
地址是否递增
模式选择
标志位