DMA使用是一個不需要CPU干預,自己搬運數據的模塊,在前面講中斷事件的章節里面,就有提到過事件的DMA通道,DMA事件路由(DMA Event Route)。
MSPM0L系列提供了6中DMA工作模式,除了比較常見的固定地址到固定地址(Fixed Address To Fixed Address),固定地址到地址塊(Fixed Address To Block Of Address),地址塊到固定(Block Of Address To Fixed Address),地址塊到地址塊( Block Of Address To Block Of Address)。
還提供了填數據到地址塊(Fill Data To Block Of Address),數據表到特定地址(Data Table To Specific Address)功能。
填數據到地址塊(Fill Data To Block Of Address)功能是用來快速生成一個等距數組,間距可以選擇±1,±2,±4,±8四個選項,DMA會把源地址中填入的數據當做起始數據,然后進行加減間距,填到目標地址中。
數據表到特定地址(Data Table To Specific Address)功能,就是DMA順序讀兩次源地址中的數據,把第一個數據當做目標地址的地址,第二個數據當做目標地址的數據,依次填入對應的RAM中。
這里就接著上一次的UART的使用教程,上一次UART發送收到的信息是使用的中斷的方式,這次的程序使用UART接收中斷觸發DMA,DMA再把收到的信息通過UART發送出去。
在上次UART的SYSCONFIG配置中,在UART選項頁面配置DMA。
DMA的觸發源選擇UART的接收中斷,會生成一個DMA通道的配置,因為是把串口接收寄存器中的數據搬運到串口的發送寄存器,所以選擇的是固定地址到固定地址的發送,每次觸發發送為1個字節,發送模式選擇Repeat Single,如果不是Repeat的話,DMA會在發送完成傳輸次數(Transfer Size)后關閉DMA通道。
再到程序中,配置也比較簡單,只需要手動配置好源地址和目標地址,使能DMA即可。
配套的工程文件名為DMA,需要復制到SDK目錄下運行。
DMA的觸發源比較多,在mspm0l1306.h中可以找到對應芯片支持的觸發源。
可以看到除了除了DMA事件路由和軟件觸發外,還支持通用事件路由。
其實DMA的中斷除了可以中斷CPU,也可以產生通用路由事件做其他控制用,這樣就可以最大程度的較少CPU的干預,提升效率,降低功耗。
審核編輯:湯梓紅
-
中斷
+關注
關注
5文章
898瀏覽量
41497 -
uart
+關注
關注
22文章
1235瀏覽量
101395 -
dma
+關注
關注
3文章
561瀏覽量
100586 -
開發板
+關注
關注
25文章
5050瀏覽量
97471 -
數據表
+關注
關注
0文章
298瀏覽量
11471
原文標題:MSPM0L1306開發板教程7 - DMA
文章出處:【微信號:創易棧,微信公眾號:創易?!繗g迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論