3. DMA(数据的搬运工)
3.1 DMA简介
DMA(直接存储器访问),DMA传输是将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。
CPU无时不刻的在处理着大量的事务,但有些事情却没有那么复杂,比方说数据的复制和存储数据,如果我们把这部分的CPU资源拿出来,让CPU去处理其他的复杂计算事务,能够更好的利用CPU的资源.
因此:转移数据(尤其是转移大量数据)是可以不需要CPU参与。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,直接让数据由A拷贝到B 不经过CPU的处理
3.1 DMA作用
DMA的传输方式无需CPU参与,可以直接控制传输。
DMA给外部设备和内存开辟了一条直接数据传输的通道。
目的:给CPU节省资源,使CPU的工作效率提高
3.1 DMA主要特性
1)同一个DMA模块可以有多个优先级请求:很高、高、中等、低
2)每个通道有3个事件标志: DMA半传输、DMA传输完成、 DMA传输出错
3)数据源 目标源 数据传输宽度对齐
4)传输数据 字节(8位) 半字(16位) 全字(32位 )
5)双向的AHB主端口,GPDMA:2个端口
6)内存映射数据从源到目标的传输:
外设到内存
内存到外设
内存到内存
外设到外设
7)在睡眠和停止模式下自主数据传输
8)并发DMA通道
9)GPDMA 有 16 个通道。
3.4 DMA寄存器
DMA_CPARx : 设置外设地址的寄存器
DMA_CMARx : 设置存储器地址的寄存器
DMA_CCRx : 设置数据传输方向
DMA_CNDTRx:设置传输的数据量
3.5 DMA的增量或者循环模式
1)增量:外设搬移到存储器的时候 ,不希望覆盖上一个数据,会将内存设置为增量模式
2)循环:DMA不停循环的搬移数据,一组的数据传输完成时,计数寄存器将会自动地被恢复成配置该通道时设置的初值。
DMA的增量或循环模式是指在进行连续数据传输时,DMA可以选择以递增的方式访问源和目标地址,或者以循环的方式重复访问相同的地址。
在增量模式下,DMA控制器在每次传输完成后,会自动增加内存地址的值,使得下一次传输的数据存储在内存中的下一个位置。这样,外部设备可以连续地读写数据,而不需要额外的指令干预。
在循环模式下,DMA控制器在传输完成后,会重新回到起始内存地址,再次开始传输数据。这样,外部设备可以循环地读写同一块内存区域,方便处理需要重复操作的数据。
DMA配置要点:
- 数据源 2. 目标 3. 数据宽度 4.DMA模式 增量/循环
3.6 DMA搬运ADC实验
搬运PB1(电位器分得的电压)
ADC的DMA转运结束后会进入此中断
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)