在Cortex-M3上所有的週邊皆有DMA,第一次接觸還覺得很怪。因為以往的單晶片並無此類裝置。
最奇怪的,是ADC不用DMA還不行。主因是ADC支援multi-channel,但卻只有一個data register。
若是啟動Scan功能,會一次多個channel掃入,就好像是有多個ADC,只是時間上是分開的。
但結果全部只在一個data register上。
所以問題來了,一但Scan一個channel結束,沒有取走資料,下一個channel會蓋過。
DMA的功能來了,它就是將資料依各channel分開將結果傳到RAM的位置上。
這個功能很方便,可以將RAM當成是ADC的結果register。還可以利用DMA的半滿旗標,做成double buffer。
其他週邊,如通信也有,若是已知的傳輸內容,可以設定DMA一次做完再通知。
然後就用在UART上看看,設定bund rate為1.5Mhz,就照計算上的速率在傳,傳輸利用率是100%。
Bee在一個24Mhz的單晶片上,利用DMA就實現了us級的信號時間控制。
在幾年前Bee遇到這樣的狀況會利用FPGA/CPLD去做。
但有DMA,FPGA就可以省下來了。
而且ADC也可以設定在訊號產生時做取樣,做到接近FPGA的時間控制,而且有12位元解析度。
重點是,單晶片本身的價格不高,已可以做到精確的時間上做取樣的工作。
所以單晶片在ARM Cortex-M系列的加持下,進入了新的應用方式。
接下來,只剩下工程師要如何發揮的問題了。
原來這就是DMA....週邊皆有DMA...Microchip dspic30f4011 的AD也有類似的功能可以一次取樣多個頻道(channel),難怪我一直覺得它很神奇卻又不知道為什麼可麼這麼用,都是照datasheet乖乖的設定.
回覆刪除[版主回覆11/07/2012 13:19:58]這還是一般用法,我還做了一些在網路上都找不到的。因此省下不少硬體。
省下Cost才是老闆想看到的。