atXmega相比atmega系列芯片,增加的一個比較顯著的功能就是DMA控制器。
DMA控制器可以直接將數據從一個外設寄存器移到內部或外部SRAM,也可在SRAM的不同地址間,甚至不同外設寄存器之間移動數據。當CPU數據總線空閑時,DMA控制器便會用它來完成內存和外設間的數據傳輸,無需使用CPU資源。采用DMA控制器的芯片,性能更好,功耗更低。
DMA控制器有一個比較重要的概念,就是數據傳輸。里面又有Burst transfer【突發傳輸】和Block transfer【塊傳輸】。Blocktransfer是有多個Burst transfer構成。DMA transaction可以由單個或者多個Blocktransfer構成。之所以要定義這些概念,是為了確定數據發送地址和數據目標地址的重載方式。
這里我們用一個簡單的例子來說明DMA的功能。ADC轉換結果通過一個DMA通道傳送到SRAM。即ADC轉換結束觸發DMA transaction,將AD值【CHnRES】傳輸到目標變量samples_0[0]內。
那么數據源發送地址就是CHnRESH和CHnRESL的地址,目標地址就是samples_0[0]的地址,即samples_0咯。我們用最簡單的傳輸方式,ADC轉換結束,就采用一次Burst transfer(single slot)傳送兩個字節(CHnRESH和CHnRESL)。下面黃色部分是對single-slot傳輸的解釋。
下面貼程序,首先是DMA初始化設置。
下面是ADC部分,啟動ADC采樣。
ADC采樣結束會把AD值自動傳輸給變量samples_0[0]。傳輸完后,由于single-slot模式DMA傳輸通道使能會位被清零。如果需要再次使用DMA功能,需要重新將使能位置1(DMA_CH_ENABLE_bm)。
采用DMA功能實現ADC采樣,相比輪詢和中斷方式,可以極大的減少對CPU資源的占用。
自己也是在上班之余,看了兩個晚上的DMA功能和相關程序寫出來的,程序是通過電路板驗證過的。大家在理解的基礎上,自己組織一下,就可以拿來用。
-
Atmel
+關注
關注
17文章
311瀏覽量
107304 -
dma
+關注
關注
3文章
561瀏覽量
100587
發布評論請先 登錄
相關推薦
評論