atXmega相比atmega系列芯片,增加的一個比較顯著的功能就是DMA控制器。
DMA控制器可以直接將數(shù)據(jù)從一個外設(shè)寄存器移到內(nèi)部或外部SRAM,也可在SRAM的不同地址間,甚至不同外設(shè)寄存器之間移動數(shù)據(jù)。當(dāng)CPU數(shù)據(jù)總線空閑時,DMA控制器便會用它來完成內(nèi)存和外設(shè)間的數(shù)據(jù)傳輸,無需使用CPU資源。采用DMA控制器的芯片,性能更好,功耗更低。
DMA控制器有一個比較重要的概念,就是數(shù)據(jù)傳輸。里面又有Burst transfer【突發(fā)傳輸】和Block transfer【塊傳輸】。Blocktransfer是有多個Burst transfer構(gòu)成。DMA transaction可以由單個或者多個Blocktransfer構(gòu)成。之所以要定義這些概念,是為了確定數(shù)據(jù)發(fā)送地址和數(shù)據(jù)目標(biāo)地址的重載方式。

這里我們用一個簡單的例子來說明DMA的功能。ADC轉(zhuǎn)換結(jié)果通過一個DMA通道傳送到SRAM。即ADC轉(zhuǎn)換結(jié)束觸發(fā)DMA transaction,將AD值【CHnRES】傳輸?shù)侥繕?biāo)變量samples_0[0]內(nèi)。
那么數(shù)據(jù)源發(fā)送地址就是CHnRESH和CHnRESL的地址,目標(biāo)地址就是samples_0[0]的地址,即samples_0咯。我們用最簡單的傳輸方式,ADC轉(zhuǎn)換結(jié)束,就采用一次Burst transfer(single slot)傳送兩個字節(jié)(CHnRESH和CHnRESL)。下面黃色部分是對single-slot傳輸?shù)慕忉尅?/p>

下面貼程序,首先是DMA初始化設(shè)置。

下面是ADC部分,啟動ADC采樣。

ADC采樣結(jié)束會把AD值自動傳輸給變量samples_0[0]。傳輸完后,由于single-slot模式DMA傳輸通道使能會位被清零。如果需要再次使用DMA功能,需要重新將使能位置1(DMA_CH_ENABLE_bm)。


采用DMA功能實現(xiàn)ADC采樣,相比輪詢和中斷方式,可以極大的減少對CPU資源的占用。
自己也是在上班之余,看了兩個晚上的DMA功能和相關(guān)程序?qū)懗鰜淼模绦蚴峭ㄟ^電路板驗證過的。大家在理解的基礎(chǔ)上,自己組織一下,就可以拿來用。

-
Atmel
+關(guān)注
關(guān)注
17文章
312瀏覽量
110296 -
dma
+關(guān)注
關(guān)注
3文章
582瀏覽量
105918
發(fā)布評論請先 登錄
一文詳解AXI DMA技術(shù)
DMA彈性映射功能
NVMe高速傳輸之?dāng)[脫XDMA設(shè)計56:測試DMA 功能
轉(zhuǎn):ATxmega入門之六:ATxmage SPI模塊介紹
一文了解LVGL的學(xué)習(xí)路線
STM32一文通(9) DMA
ATxmega256A3U中文資料解密
一文詳解DMA
迪文DMA485K電源載波總線數(shù)話同傳模塊發(fā)布
一文了解ATxmega的DMA功能使用教程
評論