本應用筆記與 STM32U575/585 微控制器(MCU)中嵌入的通用 DMA(GPDMA)相關。GPDMA 是一種系統(tǒng)外設,是 AHB 總線上的雙端口主設備。它被用于通過鏈表在外設和/或存儲器之間傳輸數據。所有 GPDMA 可編程傳輸均在系統(tǒng)層面提供更高性能,并使 CPU 無需執(zhí)行這些數據傳輸任務。
本文檔的目的不是將現(xiàn)有的 GPDMA 專用章節(jié)重新編寫到產品參考手冊中,而是為系統(tǒng)開發(fā)人員提供一些以性能為導向的編程指南。
本文檔以 GPDMA 和可能受到 GPDMA 協(xié)助的外設的組合功能為基礎。本文檔聚焦于為了優(yōu)化系統(tǒng)性能和滿足應用要求而需要考慮的所有關鍵點。
本應用筆記包含關于以下內容的原理闡述和建議:
- GPDMA 通道分配
- GPDMA 端口分配
–對于始于存儲器映射源位置的傳輸
–對于止于存儲器映射目標位置的傳輸
- GPDMA 傳輸優(yōu)先級分配
- GPDMA 源/目標突發(fā)編程,包含數據寬度和突發(fā)長度
GPDMA 概述
在減載 CPU 的控制下,GPDMA 控制器通過鏈表執(zhí)行存儲器映射外設和/或存儲器之間的可編程數據傳輸。
GPDMA 是雙端口 AHB 主設備和系統(tǒng)外設。大多數外設和存儲器都與之建立連接。在需要數據傳輸時,這一點提供了很大的靈活性并提高了系統(tǒng)性能。鏈表是存儲器中程序化的數據結構,旨在讓每個 GPDMA 通道為鏈接和安排DMA 數據傳輸做好準備。GPDMA 有 16 個通道。
GPDMA 通道分配
用戶必須分配一個通道用于 GPDMA 傳輸。為了能夠同時處理來自源的 GPDMA 傳輸(讀訪問)和到達目標的GPDMA 傳輸(寫訪問),GPDMA 對給定 GPDMA 通道使用專用 FIFO。
FIFO 單元的單位是一個字節(jié)。FIFO 的大小決定了通道能夠有效處理的最大 DMA 突發(fā)大?。ㄍ话l(fā)長度與數據寬度的乘積)。注意,通常突發(fā)越大,系統(tǒng)總體性能越好:更高吞吐率/帶寬傳輸,更低系統(tǒng)總線占用率。
鑒于系統(tǒng)總線為 32 位字寬,建議將 DMA 源/目標數據寬度設定為 32 位(GPDMA_CxTR1 中的 S/DDW_LOG2[1:0]),以便最大限度減少總線使用量。
GPDMA 端口選擇
用戶必須為始于源(GPDMA_CxTR1 中的 SAP)的傳輸分配一個端口,并且為止于目標(GPDMA_CxTR1 中的DAP)的傳輸分配一個端口。在執(zhí)行下一次數據傳輸之前,會通過下一個鏈表項和數據結構動態(tài)更新此分配。