假如adc采樣頻率很快,用adc+dma的方式將資料送到記憶體中,而對資料處理的速度較慢,是不是dma的傳輸也會覆寫上一次沒處理完的資料?那這樣和直接對adc的資料暫存器操作有什么區別呢?
uj5u.com熱心網友回復:
像這種采樣頻率很快,資料處理的速度較慢,要想不丟數只能先保存后處理。uj5u.com熱心網友回復:
adc暫存器只能保存一個資料,使用adc+dma可以保存大量資料而不需要cpu參與,這樣可以減少cpu查詢資料的頻率。uj5u.com熱心網友回復:
使用合適的快取區uj5u.com熱心網友回復:
先回答樓主的問題:當配置ADC+DMA單快取器單通道采樣時,如果ADC采樣速度快,讀取速度慢,那么讀取的ADC值是最近的值,和上次讀取之間時間段的采樣值都被重繪了,即丟失。
這種配置方式及讀取機制,在功能上確實和直接讀暫存器操作沒區別;但是在運行機制上是不一樣的,直接讀取暫存器需要占用系統時鐘處理,但是使用DMA就相當于CPU使用雙執行緒,即不影響系統任務的運行,只是在一個記憶體區讀取一個資料而已。
拓展:(僅參考)
如果是測量電壓這種類似需要濾波的場景,可以采用 ADC+DMA 多快取區配置。
以單通道ADC+DMA測量電壓為例,配置ADC+ DMA,定義一個快取BUF[20],每采一次樣就把值存入BUF,同時存盤地址++,即每次新的值重繪第前20個的歷史值,保證BUF中每次都是最新的20個值;讀取時,把BUF中的20個值取平均值,即當前電壓值。這個方法可以起簡單濾波作用。
uj5u.com熱心網友回復:
dma 可以讓出cpu ,動態分配buf 可以解決覆寫問題uj5u.com熱心網友回復:
樓上說的對,合理分配bufer存盤資料,動態分配是最 好!uj5u.com熱心網友回復:
如果處理不過來 證明不需要這么高的采樣速度啊轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/20456.html
標籤:單片機/工控
