概述
在使用Artery部分系列MCU時(如AT32F413AT32F415AT32F403AAT32F407),可以使用DMA彈性映射功能。此功能使得DMA的通道配置更加靈活,可以將某外設(shè)的DMA請求通道指定到DMA1或者DMA2共14個通道中的任意一個通道。(如:可以將SPI1接受數(shù)據(jù)的DMA請求指定到DMA1的通道7)。
本指南將介紹如何使用DMA彈性映射請求,從而使得DMA傳輸變得更加靈活多變。
配置及使用方法
常規(guī)DMA使用(DMA固定映射)
常規(guī)的DMA使用以及配置方式為:外設(shè)的DMA通道已經(jīng)固定且不可改變,使用時配置好再使能固定通道即可。這就意味著如果想開啟某個外設(shè)的DMA功能,那么通道是不可改變的,例如想使用SPI1的RX DMA功能,那么就要查看RM的手冊,如下:
表1. DMA固定映射請求
從表格中可以知道需要開啟DMA1的通道2。
DMA彈性映射使用
DMA彈性映射請求功能提供了一種更靈活的使用方式,即外設(shè)的DMA通道不固定,可選擇DMA1和DMA2中,共14個通道的任意一個通道。
想要使用此功能,需要通過以下幾步的設(shè)定:
1) 開啟DMA彈性映射功能
將DMA的通道來源寄存器1的第24bit寫1,即DMA_SRC_SEL1寄存器的DMA_FLEX_EN位。
向通道設(shè)置對應(yīng)的寄存器中寫入相應(yīng)的硬件ID號。
每個外設(shè)的DMA請求都分配了一個硬件ID號,只要將這個ID號寫進通道來源寄存器中即可。ID號可查看RM中的表格,以403A為例,如下:
表2. 403A各個信道的DMA彈性請求一覽
上表中的CHx_SRC設(shè)定值就是硬件ID號,將這個ID號寫進通道來源寄存器中的對應(yīng)通道bit位就可以了。例如:要將SPI1的RX的DMA請求映射到DMA1的通道7,那么就要將0x09寫入到DMA_SRC_SEL1寄存器的CH7_SRC[23:16]。其他配置與常規(guī)DMA配置相同通過以上3步的配置,彈性映射功能即可使用。
注:DMA1/2的DMA_FLEX_EN必須要同時設(shè)定為1或時,DMA1/2的映像模式必須一致。無法DMA1是固定式映像,DMA2是彈性式映像。
2) DMA彈性映射庫函數(shù)使用
以上的配置在BSP中的dma.hdma.c的庫文件中有提供相應(yīng)的庫函數(shù),使用者只需調(diào)用庫函數(shù)即可完成DMA彈性映射模式的配置。
庫函數(shù)說明如下:
表3. DMA彈性映射庫函數(shù)說明
此函數(shù)只需在配置好DMA常規(guī)功能后調(diào)用即可,如下:
圖1. DMA固定映射庫函數(shù)調(diào)用范例
上圖中為設(shè)置TIMER1的更新中斷為DMA彈性映射請求范例。
例程說明
DMA彈性映射功能在BSP中例程,路徑為:
AT32F403A_407_Firmware_Library_V2.x.xprojectat_start_f403aexamplesdmadata_to_gpio_flexible(以403A路徑為例)
下面將對這兩個例程做一個使用說明。
? data_to_gpio_flexible
例程data_to_jpio_flexible
本例程實現(xiàn)的功能為利用DMA將SRAM的數(shù)據(jù)傳輸?shù)紾PIO口的輸出寄存器中,從而達到控制GPIO口輸出的目的。同時配置TMER2產(chǎn)生overflow中斷并產(chǎn)生DMA請求,配置次DMA請求為彈性映射模式。
TIMER2每產(chǎn)生一次DMA請求,DMA就從SRAM搬運一筆數(shù)據(jù)到GPIO口。
DMA相關(guān)的配置代碼:
實驗結(jié)果可采用邏輯分析儀抓取GPIO口數(shù)據(jù)查看。
來源:AT32 MCU 雅特力科技
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請聯(lián)系小編進行處理
審核編輯 黃宇
-
mcu
+關(guān)注
關(guān)注
146文章
17172瀏覽量
351555 -
dma
+關(guān)注
關(guān)注
3文章
563瀏覽量
100639
發(fā)布評論請先 登錄
相關(guān)推薦
評論