DMA簡介
DMA控制器的作用不僅在增強系統(tǒng)性能并減少處理器的中斷生成,而且還針對32位MCU應(yīng)用程序?qū)iT優(yōu)化設(shè)計。DMA控制器為存儲器到存儲器,存儲器到外設(shè)和外設(shè)到存儲器的傳輸提供了7個通道。每個通道都支持外設(shè)的DMA請求映射到任意通道上。圖1. DMA控制器架構(gòu)
DMAMUX簡介
對于如何將外設(shè)的DMA請求映射到任意的數(shù)據(jù)流通道上,就需要使用到DMAMUX。DMAMUX針對每個外設(shè)都設(shè)計了獨有的ID號,使用者只需要將此ID號寫入對應(yīng)的寄存器中并打開DMAMUX功能即可。DMAMUX的引入,使得DMA相較于傳統(tǒng)DMA控制器變得更加靈活,使用者可以隨意的分配7個通道的使用情況,不必再糾結(jié)與某個IP的DMA請求只能固定使用在某個或某幾個通道上。各IP對應(yīng)ID號如下表:表1. 各IP對應(yīng)ID號列表
注:表格中“DMAMUX請求”為ID號;“來源”為各IP的DMA請求。
DMA功能解析
可編程數(shù)據(jù)寬度
DMA控制器的通道可支持傳輸不同數(shù)據(jù)寬度,byte/halfword/word。通過DMA_CxCTRL中的PWIDTH和MWIDTH位可以對源數(shù)據(jù)和目標(biāo)數(shù)據(jù)的數(shù)據(jù)寬度進行編程,通常情況下需要設(shè)置PWIDTH和MWIDTH位相等,當(dāng)PWIDTH不等于MWIDTH時,會依據(jù)PWIDTH/MWIDTH設(shè)定將資料對齊。圖2. PWIDTH:byte, MWIDTH:half-word圖3. PWIDTH:half-word, MWIDTH:word
配置DMAMUX
在M2P與P2M模式下,必須配置DMAMUX,否則DMA不會響應(yīng)外設(shè)DMA請求。DMAMUX的作用是為外設(shè)的DMA請求復(fù)用通道,即任何一個外設(shè)的DMA請求可以映射到DMA1/DMA2的任意通道,這大大增加了DMA通道分配的靈活性。配置DMAMUX比較簡單,只需調(diào)用專門提供的兩個接口函數(shù)即可:
配置請求生成器模塊
在配置了DMAMUX時,可選擇配置DMA請求生成器模塊,模塊一共有4個請求生成器通道。此模塊無需任何傳統(tǒng)外設(shè)(如TIMER、SPI等)提供DMA請求,可通過外部EXINT輸入作為DMA請求源輸入。配置請求生成器模塊較為簡單,只需調(diào)用專門提供的接口函數(shù)即可:
配置請求同步模塊
在配置了DMAMUX時,可選擇配置DMA同步模塊,模塊一共有7個同步通道。使能此功能后,當(dāng)外設(shè)產(chǎn)生DMA請求時,DMA不會馬上響應(yīng)并傳輸數(shù)據(jù),而是要等待同步信號的到來,當(dāng)接收到同步信號后,DMA才會根據(jù)配置傳輸數(shù)據(jù);同步信號可由外部EXINT輸入提供配置同步模塊較為簡單,只需調(diào)用專門提供的接口函數(shù)即可:
DMA配置解析
以下對DMA的配置接口及流程進行說明。
函數(shù)接口
表2. 通道配置函數(shù)列表
數(shù)據(jù)流配置
- 設(shè)置外設(shè)地址(CxPADDR寄存器)數(shù)據(jù)傳輸?shù)某跏纪庠O(shè)地址,在傳輸過程中不可被改變。
- 設(shè)置存儲器地址(CxMADDR寄存器)數(shù)據(jù)傳輸?shù)某跏純?nèi)存地址,在傳輸過程中不可被改變。
- 配置數(shù)據(jù)傳輸量(CxDTCNT寄存器)可編程的傳輸數(shù)據(jù)長度最大為65535。在傳輸過程中,該傳輸數(shù)據(jù)量的值會逐漸遞減。
- 數(shù)據(jù)流配置(CxCTRL寄存器)包含通道優(yōu)先級,數(shù)據(jù)傳輸?shù)姆较?、寬度、地址增量模式、循環(huán)模式和中斷方式。優(yōu)先級(CHPL)分為4個等級,最高優(yōu)先級、高優(yōu)先級、中等優(yōu)先級和低優(yōu)先級。若有2個流優(yōu)先級設(shè)定相同,則較低編號的流有較高的優(yōu)先權(quán)。舉例,流1優(yōu)先于流2。數(shù)據(jù)傳輸方向(DTD)分為存儲器到外設(shè)(M2P),外設(shè)到存儲器(P2M)或存儲器到存儲器(M2M)傳輸。在存儲器到存儲器傳輸模式下不允許使用循環(huán)模式、雙緩沖模式和直接模式。數(shù)據(jù)傳輸寬度(PWIDTH/MWIDTH)根據(jù)實際使用情景,可配置寬度為byte、halfword、word。地址增量模式(PINCM/MINCM)當(dāng)通道配置設(shè)定為增量模式時,下一筆傳輸?shù)牡刂穼⑹乔耙还P傳輸?shù)刂芳由蟼鬏攲挾龋≒WIDTH/MWIDTH)。循環(huán)模式(LM)當(dāng)流配置設(shè)定為循環(huán)模式時,在最后一次傳輸后CxDTCNT寄存器的內(nèi)容會恢復(fù)成初始值。
- 使能DMAMUX(MUXSEL寄存器的TBL_SEL位)在非存儲器到存儲器(M2M)模式下時,需要使能DMAMUX功能,才能啟動數(shù)據(jù)流響應(yīng)外設(shè)的DMA請求。
- 寫入外設(shè)ID號(MUXCxCTRL寄存器的REQSEL)在非存儲器到存儲器(M2M)模式下時,需要將外設(shè)的DMA請求ID號寫入,才能啟動數(shù)據(jù)流響應(yīng)外設(shè)的DMA請求。
- 打開數(shù)據(jù)流(CxCTRL寄存器的CHEN位)
配置流程
- 打開DMA時鐘;
- 調(diào)用通道復(fù)位函數(shù)復(fù)位數(shù)據(jù)流;
- 調(diào)用結(jié)構(gòu)體初始化函數(shù)初始化通道配置結(jié)構(gòu)體;
- 調(diào)用初始化函數(shù)初始化通道;
- 調(diào)用DMAMUX使能函數(shù)以及ID號寫入函數(shù)配置DMAMUX相關(guān)內(nèi)容;
- 調(diào)用通道使能函數(shù)開啟通道。
-
dma
+關(guān)注
關(guān)注
3文章
560瀏覽量
100544 -
雅特力
+關(guān)注
關(guān)注
0文章
157瀏覽量
8004 -
AT32
+關(guān)注
關(guān)注
1文章
113瀏覽量
2090
發(fā)布評論請先 登錄
相關(guān)推薦
評論