本应用笔记与 STM32U575/585 微控制器(MCU)中嵌入的通用 DMA(GPDMA)相关。GPDMA 是一种系统外设,是 AHB 总线上的双端口主设备。它被用于通过链表在外设和/或存储器之间传输数据。所有 GPDMA 可编程传输均在系统层面提供更高性能,并使 CPU 无需执行这些数据传输任务。
本文档的目的不是将现有的 GPDMA 专用章节重新编写到产品参考手册中,而是为系统开发人员提供一些以性能为导向的编程指南。
本文档以 GPDMA 和可能受到 GPDMA 协助的外设的组合功能为基础。本文档聚焦于为了优化系统性能和满足应用要求而需要考虑的所有关键点。
本应用笔记包含关于以下内容的原理阐述和建议:
- GPDMA 通道分配
- GPDMA 端口分配
–对于始于存储器映射源位置的传输
–对于止于存储器映射目标位置的传输
- GPDMA 传输优先级分配
- GPDMA 源/目标突发编程,包含数据宽度和突发长度
GPDMA 概述
在减载 CPU 的控制下,GPDMA 控制器通过链表执行存储器映射外设和/或存储器之间的可编程数据传输。
GPDMA 是双端口 AHB 主设备和系统外设。大多数外设和存储器都与之建立连接。在需要数据传输时,这一点提供了很大的灵活性并提高了系统性能。链表是存储器中程序化的数据结构,旨在让每个 GPDMA 通道为链接和安排DMA 数据传输做好准备。GPDMA 有 16 个通道。
GPDMA 通道分配
用户必须分配一个通道用于 GPDMA 传输。为了能够同时处理来自源的 GPDMA 传输(读访问)和到达目标的GPDMA 传输(写访问),GPDMA 对给定 GPDMA 通道使用专用 FIFO。
FIFO 单元的单位是一个字节。FIFO 的大小决定了通道能够有效处理的最大 DMA 突发大小(突发长度与数据宽度的乘积)。注意,通常突发越大,系统总体性能越好:更高吞吐率/带宽传输,更低系统总线占用率。
鉴于系统总线为 32 位字宽,建议将 DMA 源/目标数据宽度设定为 32 位(GPDMA_CxTR1 中的 S/DDW_LOG2[1:0]),以便最大限度减少总线使用量。
GPDMA 端口选择
用户必须为始于源(GPDMA_CxTR1 中的 SAP)的传输分配一个端口,并且为止于目标(GPDMA_CxTR1 中的DAP)的传输分配一个端口。在执行下一次数据传输之前,会通过下一个链表项和数据结构动态更新此分配。