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