嵌入式ARM芯片DMA功能分析

682 阅读3分钟

1 STM32 F429芯片

1.1 总体架构图

image.png

1.2 8个数据流,一个数据流对应8个通道

  • STM32F429 最多有 2 个 DMA 控制器(DMA1 和 DMA2),共 16 个数据流(每个控制器 8 个),每一个 DMA 控制器都用于管理一个或多个外设的存储器访问请求。每个数据流总共可以有多达8 个通道(或称请求)。每个数据流通道都有一个仲裁器,用于处理 DMA 请求间的优先级。 image.png image.png

1.3 优先级

image.png

1.4 阈值级别与突发配置

  • FIFO(4个字,共16个缓冲字节,一个字是4个字节,1/4表示1个字(4个字节)1/2表示2个字(8个字节)3/4表示3个字(12个字节),4/4表示4个字(16个字节)) image.png image.png

1.5 两个 DMA 控制器的系统实现

image.png image.png

2 STM32 H7芯片

  • STM32H7采用电源域分块架构,分为三个独立电源域(D1,D2和 D3),见图 21-1 STM32H7的内部架构。提升了性能而不牺牲能效。
  • D1 域,为高性能域,包含了高数据带宽的外设、连接在 AXI总线矩阵上 DMA控制器和存储器;
  • D2域,为通信接口域,主要是一些通信外设,如 SPI、ETH等,还有 DMA控制器和存储器;
  • D3域,为数据批处理域, ADC,GPIO等外设就包含在该域中,还包含了 DMA 控制器和存储器。
  • 每个域都拥有各自的 DMA控制器,D1域的DMA控制器,称为 MDMA, D2 域的 DMA控制器属于通用 DMA, D3的 DMA控制器,称为 BDMA. image.png
  • DMA控制器的1处是通用 DMA(DMA1 和 DMA2),线与线之间的空心圆,表示DMA 能够访问该外设或者是该存储器,可以看出通用除了不能访问 ITCM-RAM 和 DTCM-RAM,D1 和 D3 域的外设和存储器都可以访问;2处是 MDMA,MDMA 可以访问 ITCM-RAM 和 DTCM-RAM,还可以访问 D2 域和 D3 域的部分外设和存储器;3处是 BDMA,BDMA 只能访问挂载在AHB4 和 APB4 总线的外设、SRAM4 以及 BackupSRAM。关于这些存储器的地址,可以参考。由于每一个 DMA 的访问地址都是有限制,所以我们需要注意变量的存储位置,如果用户使能了 Cache,还应该考虑数据的一致性,否则很容易造成 DMA 传输发送错误或者数据内容不对。 image.png
  • STM32H743 系列资源丰富,具有两个 DMA 控制器,同时外设繁多,为实现正常传输,DMA需要通道选择控制。DMA控制器具有 8 个数据流,每个数据流可以提供多达 115个外设请求, image.png
  • 1.DMA 控制器的从机编程接口,通过该接口可以对 DMA 的相关控制寄存器进行设置,从而配置 DMA,实现不同的功能。同时,该接口可以输出 dma_it[0:7]的中断信号到 NVIC,以及 dma_tcif[0:7]的信号到 MDMA。
  • 2.DMA 控制器的外设接口,用于访问相关外设,特别的,当外设接口设置的访问地址是内存地址的时候,DMA 就可以工作在内存到内存模式了。
  • 3.DMA 控制器的 FIFO 区,每个数据流(总共 8 个数据流)都有一个独立的 FIFO,可以实现存储器接口到外设接口之间的数据长度非对齐传输。
  • 4.DMA 控制器的存储器接口,用于访问外部存储器,特别的当存储器地址是外设地址的时候,可以实现类似外设到外设的传输效果。
  • 5.DMA 控制器的仲裁器,用于仲裁数据流 0~7 的请求优先级,保证数据有序传输。
  • 6.这是 DMA 控制器数据流 0~7 的通道请求信号,由 DMAMUX1 的选择,每个数据流有多达 115 个通道请求可以选择。我们必须根据实际需求来选择对应的通道请求。 image.png image.png