Cortex-M4內(nèi)核微處理器DMA方式的高速A/D采樣
1 MK60N512VMD100微處理器簡介
MK60N512VMD100芯片是基于Cortex-M4內(nèi)核的典型芯片,是飛思卡爾Kinetis系列中集成度最高的芯片。Cortex-M4內(nèi)核是在Cortex-M3內(nèi)核的基礎(chǔ)上發(fā)展起來的,其性能比Cortex-M3提高了20%。Cortex-M4在Cortex-M3的基礎(chǔ)上強化了運算能力,增加了浮點運算控制器、DSP和并行計算等。MK60N512VMD100具有豐富的通信接口,主頻高達100MHz,32路DMA供外設(shè)和存儲器使用,大大提高了CPU利用率,具有33路單路和4路差分的16位A/D轉(zhuǎn)換器、2路12位D/A轉(zhuǎn)換器等外設(shè)。
2 MK60N512VMD100芯片DMA和ADC介紹
Kinetis系列微處理器都含有DMA,在最小的CPU干預(yù)下最高可提供32路DMA供外設(shè)和存儲器使用,大大提高了CPU的利用率。DMA通道復(fù)用器(類似多路選擇開關(guān))可以把最多63個DMA請求源和16個DMA通道中的任意一個映射到一起。16路獨立可選的DMA通道中,前4路還具有自觸發(fā)功能。DMA復(fù)用器有3種工作模式:禁用模式、普通模式和周期觸發(fā)模式。本文就介紹用周期觸發(fā)模式實現(xiàn)高速A/D采樣功能。
DMA通道復(fù)用器除了提供正常的映射功能外,前4個通道還提供了周期觸發(fā)功能,由周期性中斷定時器(PIT)觸發(fā),這種機制能夠?qū)崿F(xiàn)在沒有CPU的干預(yù)下傳輸字節(jié)、幀或數(shù)據(jù)包。這種觸發(fā)功能可用于任何支持DMA傳輸?shù)耐庠O(shè),最常用的應(yīng)用包括以下兩種情況:
①定期輪詢一個特定的總線上的外部設(shè)備。例如:一個SPI總線作為源被映射到DMA通道0,一旦設(shè)置成功,只要SPI的發(fā)送緩沖區(qū)是空的就會請求DMA傳輸,從內(nèi)存中復(fù)制數(shù)據(jù)到緩存。SPI傳輸通過此通道上的一個觸發(fā)器每3μs(舉例)自動執(zhí)行一次。在SPI接收端,SPI和DMA可配置成把接收到的數(shù)據(jù)傳到內(nèi)存,在無需處理器干預(yù)的情況下有效地定期從外部沒備讀取數(shù)據(jù)送到內(nèi)存中。
②利用GPIO端口產(chǎn)生或者采樣波形。通過配置DMA將數(shù)據(jù)傳送到一個或多個GPIO端口,可以使用存儲在存儲器中的表格數(shù)據(jù)產(chǎn)生復(fù)雜的波形。相反,使用DMA從一個或多個GPIO端口讀取數(shù)據(jù),是可以采樣到復(fù)雜波形的,并把數(shù)據(jù)存儲到內(nèi)存中。
MK60N512VMD100芯片的ADC模塊具有線性逐次逼近算法與高達16位的分辨率,4路差分1 6位A/D轉(zhuǎn)換和24路單端外部模擬輸入。輸出模式有差分16位、13位、11位和9位幾種模式,單路支持16位、12位、10位和8位模式,并且輸出無符號數(shù)右對齊格式。
當(dāng)應(yīng)用程序需要連續(xù)采樣時(每秒6 000個采樣點),CPU可能會有相當(dāng)大的負擔(dān)。雖然使用可編程延遲模塊(PDB)可能會減少一些CPU的負載,但是ADC支持DMA請求功能在高速采樣時能獲得更高的性能,ADC在轉(zhuǎn)換完成后通過DMA中斷請求觸發(fā)DMA。本文就介紹此種方法。
3 軟件設(shè)計
3.1 DMA周期觸發(fā)方式相關(guān)寄存器的設(shè)置
(1)DMA通道配置寄存器(DMAMUX_CHCFGn)
DMA通道配置寄存器(DMAMUX_CHCFGn)數(shù)據(jù)格式如圖1所示。
bit7(ENBL):DMA通道使能,設(shè)置為0則通道禁用,為1則通道使能。
bit6(TRIG):DMA通道觸發(fā)使能,設(shè)置為0則觸發(fā)禁用,為1則觸發(fā)使能。
bit(5:0)(SOURCE):DMA通道源。
(2)ADC狀態(tài)和控制寄存器2(ADCx_SC2)
ADC狀態(tài)和控制寄存器2(ADCx_SC2)數(shù)據(jù)格式如圖2所示。
bit7(ADACT):轉(zhuǎn)換狀態(tài)位,當(dāng)一個A/D轉(zhuǎn)換開始時ADACT被置位,當(dāng)一個轉(zhuǎn)換完成或中止時ADACT被清零。
bit2(DMAEN):設(shè)置為0則DMA功能禁用,為1時DMA使能。當(dāng)一個ADC完成時發(fā)出 ADCDMA請求。
3.2 具體實現(xiàn)
采用DMA的方式有利于提高系統(tǒng)的實時性和執(zhí)行效率。當(dāng)A/D轉(zhuǎn)換完成后產(chǎn)生中斷;DMA接收一次數(shù)據(jù)后,設(shè)備地址禁止后移;關(guān)閉接收一次數(shù)據(jù)后,目標(biāo)內(nèi)存地址后移。設(shè)置DMA循環(huán)寫入模式,BUF寫滿后,自動回到初始地址開始傳輸。
示例代碼如下:
4 實驗及結(jié)論
首先將信號發(fā)生器輸出的正弦波信號直接連接到示波器,調(diào)節(jié)波形,并選擇適當(dāng)?shù)姆宸逯?,然后接到采樣模擬信號輸入引腳,通過串口在PC機上觀察接收到的數(shù)據(jù)。實驗證明,用DMA方式來傳輸模/數(shù)轉(zhuǎn)換的值,提高了讀取速度和采樣頻率,同時降低了CPU的負荷,具有很好的應(yīng)用價值。