標題: 關于ADC+DMA的理解 [打印本頁]

作者: 菜菜的周某人    時間: 2023-3-5 21:34
標題: 關于ADC+DMA的理解
關于STM32單片機芯片 各位大佬,我對ADC的理解是所有的通道最終轉換結果只能放到一個轉換結果寄存器里,為了適應多通道ADC采樣,一種方法是開啟ADC中斷,因為每一個通道轉換結束都會觸發(fā)中斷,這樣的話我只需要在每次中斷里把本次通道轉換的結果取出來就行,這樣可以滿足工作要求,但是頻繁中斷會降低CPU的運行效率,所以另一種方法使用DMA,不使用ADC中斷,假設有3個規(guī)則通道,那么在通道1轉換結束,DMA將結果轉移到目標地址,然后依次循環(huán)到通道3結束,如果開啟了DMA傳輸完成中斷,DMA則進入中斷處理采樣數(shù)據。如果按照上述的理解,是不是說多通道里面ADC只需要DMA就好了,甚至數(shù)據處理也可以放到DMA中斷進行,那么ADC中斷是不是顯得沒有必要,ADC中斷的意義是不是沒有那么大?希望大佬們能解決我的疑惑,批評指正!

作者: lmn2005    時間: 2023-3-6 08:53
DMA不只是用于ADC,如果用戶認為其他模塊使用DMA,ADC仍然使用中斷(中斷優(yōu)先級為后),那該怎么辦?ADC中斷應該不能刪除吧,我認為。
作者: 人中狼    時間: 2023-3-6 09:23
DMA沒那么神奇,DMA只是一個傳輸通道而已,很多情況下使用DMA和不使用DMA效果沒什么不同,DMA只是在一些特定的應用里使用才會體現(xiàn)效果
作者: yzwzfyz    時間: 2023-3-6 11:24
你對DMA的目的及實現(xiàn)的方案(與ADC無關),還需進一步了解,其后就明白了。
CPU中增加DMA功能是為了什么呢?
作者: 菜菜的周某人    時間: 2023-3-6 11:30
lmn2005 發(fā)表于 2023-3-6 08:53
DMA不只是用于ADC,如果用戶認為其他模塊使用DMA,ADC仍然使用中斷(中斷優(yōu)先級為后),那該怎么辦?ADC中 ...

感謝您的回復!
作者: 菜菜的周某人    時間: 2023-3-6 11:31
人中狼 發(fā)表于 2023-3-6 09:23
DMA沒那么神奇,DMA只是一個傳輸通道而已,很多情況下使用DMA和不使用DMA效果沒什么不同,DMA只是在一些特 ...

感謝您的回復!
作者: Y_G_G    時間: 2023-3-6 13:03
DMA和中斷是兩個不同的東西
DMA是不占用主程序的時間,你做你的,我做我的
中斷是可以打斷主程序的操作,有些事件是很重要的事件,它必需要有很高的等級,這個時候就要用到中斷了
作者: renstone    時間: 2023-3-7 11:58
ADC規(guī)則通道序列的某一通道轉換結束,轉換結果被寫入數(shù)據寄存器,DMA檢測到有新數(shù)據產生,就按照配置信息把數(shù)據傳送到設定存儲器,如果配置了DMA完成中斷,則產生中斷,CPU轉入DMA中斷處理程序。中斷處理程序應當是快進快出的。
作者: Hephaestus    時間: 2023-3-7 22:06
DMA可以自動的把數(shù)據從ADC結果寄存器搬運到RAM里面,至于處理數(shù)據也能用DMA完成那是你想得太多了。
作者: zgrfox110    時間: 2023-3-8 13:12
ADC中斷讀取,每讀取100次,15個通道。MCU一共進入1500次中斷。如果速度不快,或者是沒有用到其它高頻率的定時器,沒問題。如果有高頻次中斷,單片機就會頻繁進入各種中斷,導致單片機效率不高!如果用DMA,只需要設置DMA讀取ADC。所有通道都讀完了(前邊的1500次),并且算出平均值,DNA申請一次中斷,MCU只需要取出所有通道ADC的平均值,直接使用就行!就像兩個CPU,一個處理你的任務,一個幫助調度單片機硬件。
作者: GlenXu    時間: 2023-3-8 13:43
不對!
DMA傳輸?shù)腁DC,實際上換是需要ADC中斷處理的,即使DMA中斷是打開的,也不能在DMA中斷中處理結果,只能在ADC完成中斷中處理�。�!
這個我做過試驗。好像DMA中斷沒有用,但實際也不能關閉,否則ADC也無法進行。
作者: xuyaqi    時間: 2023-3-8 14:37
單片機要有DMA功能,里面要加很多電路,實現(xiàn)的難度與成本會增加,所以不是每種單片機都有DMA_ADC功能,所以不可能不要ADC中斷,另外實時性DMA_ADC也不如ADC中斷。
作者: 多少積分    時間: 2023-3-8 15:48
在dma通道有限的情況下,adc中斷就起到了作用
作者: Y_G_G    時間: 2023-3-8 21:52
GlenXu 發(fā)表于 2023-3-8 13:43
不對!
DMA傳輸?shù)腁DC,實際上換是需要ADC中斷處理的,即使DMA中斷是打開的,也不能在DMA中斷中處理結果, ...

不需要!設定好緩沖地址,DMA的結果就會一直是最近幾次的結果
作者: yuxuesuixing    時間: 2023-3-9 11:04
DMA你還沒仔細理解透徹,他是相當于獨立于cpu外的一個傳輸數(shù)據的外設,你可以理解為他只能傳輸數(shù)據的獨立CPU,你設定好了他就自己傳輸數(shù)據。
它僅適合大量數(shù)據傳輸,數(shù)據量越大他效果越明顯,你一個字節(jié)從串口搬到內存,也不過十幾個時鐘周期,并不浪費時間,但是量一大就明顯了,頻繁的中斷入棧出棧消耗太多cpu時間,使用DMA主要就是節(jié)約這部分時間(中斷出入棧)。
假設外設自帶fifo,比如spi可以一次存1K的數(shù)據,你給屏幕寫數(shù)據,就一次性寫到spi里,大約消耗 2K個時鐘周期就夠了,這個硬件fifo就相當于不能編程的dma了,而現(xiàn)在你有了一個可以任意設置方向緩存大小的dma,是不是更完美了呢? 有的人說我喜歡硬件fifo,給我裝上!好的 四十個外設每人1Kfifo好 還是把這40k放到主內存里,外設用dma操控好?
少量的數(shù)據也能用dma,只是編程更復雜而已,也沒啥問題

作者: pdwdzz    時間: 2023-3-9 12:48
如果需要多通道輪詢采樣,那DMA沒什么必要,要切換通道必須要CPU去做。
作者: QWE4562012    時間: 2023-3-14 18:44
yuxuesuixing 發(fā)表于 2023-3-9 11:04
DMA你還沒仔細理解透徹,他是相當于獨立于cpu外的一個傳輸數(shù)據的外設,你可以理解為他只能傳輸數(shù)據的獨立CP ...

這位兄弟   大師級別
作者: 菜菜的周某人    時間: 2023-3-16 09:55
yuxuesuixing 發(fā)表于 2023-3-9 11:04
DMA你還沒仔細理解透徹,他是相當于獨立于cpu外的一個傳輸數(shù)據的外設,你可以理解為他只能傳輸數(shù)據的獨立CP ...

感謝您的回復
作者: 菜菜的周某人    時間: 2023-3-16 09:58
Hephaestus 發(fā)表于 2023-3-7 22:06
DMA可以自動的把數(shù)據從ADC結果寄存器搬運到RAM里面,至于處理數(shù)據也能用DMA完成那是你想得太多了。

老哥,我說的是在DMA中斷程序里讓CPU切入進行處理采樣數(shù)據,DMA傳輸中當然不能處理數(shù)據了,這個我知道,你看錯了。感謝您的回復!




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1