day8 STM32数据搬运工 - DMA

DMA简介

DMA,全称为:Direct Memory Access,即直接存储器访问。

DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为 RAM 与 I/O 设备开辟一条直接传送数据的通路,能使 CPU 的效率大为提高。
day8 STM32数据搬运工 - DMA_第1张图片

 DMA功能框图和特性

  • 5个独立的可配置通道,每个通道都直接连接专用的硬件DMA请求;
  • 在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:超高、高、中、低);
  • 独立数据 源和目标 数据区的传输宽度(字节、半字节、全字)源和目标 地址必须按数据宽度对齐;
  • 支持循环的缓冲器管理;
  • 每个通道有3个事件标志(DMA版传输、DMA传输完成和DMA传输出错);
  • 存储器和存储器间的传输;
  • 外设到存储器和存储器到外设,外设到外设间的传输;
  • 闪存、SRAM、APB、AHB外设均可作为访问的 源和目标;
  • 可编程的数据传输数目:最大为65536

STM32F0-DMA通道

day8 STM32数据搬运工 - DMA_第2张图片

 注:可修改SYSCFG_CFGR1来配置通道的映射关系。

DMA通道优先级

仲裁器根据优先级管理着通道的请求和启动外设 / 存储器的访问;

优先级管理分两个方面:

软件方面:可通过DMA_CCRX寄存器配置每个通道的优先级,优先级分为4各等级:

        最高等级;

        高优先级;

        中等优先级;

        低优先级;

硬件方面:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。例如:通道2优先于通道4.

STM32F0-DMA传输

DMA增量设置

  • 通过设置DMA_CCRx寄存器中的PINC和MINC标志位,外设和存储器的指针在每次传输后可以有选择的完成自动增量
  • 当设置为增量模式时,下一个要传输的地址将是签一个地址加上增量值,增量值取决于所选的数据宽度为1、2或4。

DMA循环模式

  • 循环模式用于处理循环缓冲区和连续的数据传输(如ADC的扫描模式)。在DMA_CCRx寄存器中的CIRC位用于开启这一功能。
  • 当启动了循环模式,一组的数据传输完成时,计数寄存器将会自动的被恢复成配置该通道是设置的初值,DMA操作将会继续进行。

day8 STM32数据搬运工 - DMA_第3张图片

 STM32F0-DMA中断

每一个DMA通道都可以在DMA传输过半、传输完成和传输出错时产生中断。为应用的灵活性考虑,通过设置寄存器的不同位来打开这些中断。

day8 STM32数据搬运工 - DMA_第4张图片

 注:这些标志位都在中断状态寄存器DMA_ISR中设置

你可能感兴趣的:(LV23物联网ARM,开发,stm32,嵌入式硬件,单片机,c语言,arm)