DMA简介:
直接内存访问,是一种不经过CPU而直接从内存存取数据的数据交换模式。在DMA模式下,CPU只须向DMA控制器下达指令,让DMA控制器来处理数据的传送,数据传送完毕再把信息反馈给CPU,这样就很大程度上减轻了CPU资源占有率,可以大大节省系统资源;数据传输支持从外设到存储器或者存储器到存储器,这里的存储器可以是SRAM 或者是FLASH 。DMA 控制器包含了DMA1 和DMA2,其中DMA1 有7 个通道, DMA2 有5 个通道,这里的通道可以理解为传输数据的一种管道。要注意的是DMA2 只存在于大容量的单片机中。
DMA模式数据传输过程:
- 如果外设要想通过DMA 来传输数据,必须先给DMA 控制器发送DMA 请求,DMA收到请求信号之后,控制器会给外设一个应答信号,当外设应答后且DMA 控制器收到应答信号之后,就会启动DMA 的传输,直到传输完毕。
- DMA 具有12 个独立可编程的通道,其中DMA1 有7 个通道,DMA2 有5 个通道,每 个通道对应不同的外设的DMA 请求。虽然每个通道可以接收多个外设的请求,但是同一时间只能接收一个,不能同时接收多个。
- 当发生多个DMA 通道请求时,就意味着有先后响应处理的顺序问题,这个就由仲裁器来管理。仲裁器管理DMA通道请求分为两个阶段。第一阶段属于软件阶段,可以在 DMA_CCRx 寄存器中设置,有4 个等级:非常高、高、中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的DMA通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高,比如通道1高于通道2。在大容量产品和互联型产品中, DMA1 控制器拥有高于DMA2 控制器的优先级。
DMA数据配置:
DMA传输数据的方向有三个:从外设到存储器,从存储器到外设,从存储 器到存储器。具体的方向DMA_CCR 位4 DIR 配置:0 表示从外设到存储器,1表示从存储器到外设。这里面涉及到的外设地址由DMA_CPAR 配置,存储器地址由DMA_CMAR 配置。
- 外设到存储器 :当我们从外设到存储器传输时,以ADC采集为例。DMA外设寄存器的地址对应的就是ADC数据寄存器的地址,DMA存储器的地址就是我们自定义的变量(用来接收存储AD 采集的数据)的地址。设置外设为源地址。
- 存储器到外设 :当我们使用从存储器到外设传输时,以串口向电脑端发送数据为例。DMA 外设寄存器的地址对应的就是串口数据寄存器的地址,