找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2953|回復(fù): 18
打印 上一主題 下一主題
收起左側(cè)

關(guān)于ADC+DMA的理解

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:966089 發(fā)表于 2023-3-5 21:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
關(guān)于STM32單片機(jī)芯片 各位大佬,我對(duì)ADC的理解是所有的通道最終轉(zhuǎn)換結(jié)果只能放到一個(gè)轉(zhuǎn)換結(jié)果寄存器里,為了適應(yīng)多通道ADC采樣,一種方法是開(kāi)啟ADC中斷,因?yàn)槊恳粋(gè)通道轉(zhuǎn)換結(jié)束都會(huì)觸發(fā)中斷,這樣的話我只需要在每次中斷里把本次通道轉(zhuǎn)換的結(jié)果取出來(lái)就行,這樣可以滿足工作要求,但是頻繁中斷會(huì)降低CPU的運(yùn)行效率,所以另一種方法使用DMA,不使用ADC中斷,假設(shè)有3個(gè)規(guī)則通道,那么在通道1轉(zhuǎn)換結(jié)束,DMA將結(jié)果轉(zhuǎn)移到目標(biāo)地址,然后依次循環(huán)到通道3結(jié)束,如果開(kāi)啟了DMA傳輸完成中斷,DMA則進(jìn)入中斷處理采樣數(shù)據(jù)。如果按照上述的理解,是不是說(shuō)多通道里面ADC只需要DMA就好了,甚至數(shù)據(jù)處理也可以放到DMA中斷進(jìn)行,那么ADC中斷是不是顯得沒(méi)有必要,ADC中斷的意義是不是沒(méi)有那么大?希望大佬們能解決我的疑惑,批評(píng)指正!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:71233 發(fā)表于 2023-3-6 08:53 | 只看該作者
DMA不只是用于ADC,如果用戶認(rèn)為其他模塊使用DMA,ADC仍然使用中斷(中斷優(yōu)先級(jí)為后),那該怎么辦?ADC中斷應(yīng)該不能刪除吧,我認(rèn)為。
回復(fù)

使用道具 舉報(bào)

板凳
ID:384109 發(fā)表于 2023-3-6 09:23 | 只看該作者
DMA沒(méi)那么神奇,DMA只是一個(gè)傳輸通道而已,很多情況下使用DMA和不使用DMA效果沒(méi)什么不同,DMA只是在一些特定的應(yīng)用里使用才會(huì)體現(xiàn)效果
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2023-3-6 11:24 | 只看該作者
你對(duì)DMA的目的及實(shí)現(xiàn)的方案(與ADC無(wú)關(guān)),還需進(jìn)一步了解,其后就明白了。
CPU中增加DMA功能是為了什么呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:966089 發(fā)表于 2023-3-6 11:30 | 只看該作者
lmn2005 發(fā)表于 2023-3-6 08:53
DMA不只是用于ADC,如果用戶認(rèn)為其他模塊使用DMA,ADC仍然使用中斷(中斷優(yōu)先級(jí)為后),那該怎么辦?ADC中 ...

感謝您的回復(fù)!
回復(fù)

使用道具 舉報(bào)

6#
ID:966089 發(fā)表于 2023-3-6 11:31 | 只看該作者
人中狼 發(fā)表于 2023-3-6 09:23
DMA沒(méi)那么神奇,DMA只是一個(gè)傳輸通道而已,很多情況下使用DMA和不使用DMA效果沒(méi)什么不同,DMA只是在一些特 ...

感謝您的回復(fù)!
回復(fù)

使用道具 舉報(bào)

7#
ID:401564 發(fā)表于 2023-3-6 13:03 | 只看該作者
DMA和中斷是兩個(gè)不同的東西
DMA是不占用主程序的時(shí)間,你做你的,我做我的
中斷是可以打斷主程序的操作,有些事件是很重要的事件,它必需要有很高的等級(jí),這個(gè)時(shí)候就要用到中斷了
回復(fù)

使用道具 舉報(bào)

8#
ID:586261 發(fā)表于 2023-3-7 11:58 | 只看該作者
ADC規(guī)則通道序列的某一通道轉(zhuǎn)換結(jié)束,轉(zhuǎn)換結(jié)果被寫入數(shù)據(jù)寄存器,DMA檢測(cè)到有新數(shù)據(jù)產(chǎn)生,就按照配置信息把數(shù)據(jù)傳送到設(shè)定存儲(chǔ)器,如果配置了DMA完成中斷,則產(chǎn)生中斷,CPU轉(zhuǎn)入DMA中斷處理程序。中斷處理程序應(yīng)當(dāng)是快進(jìn)快出的。
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2023-3-7 22:06 | 只看該作者
DMA可以自動(dòng)的把數(shù)據(jù)從ADC結(jié)果寄存器搬運(yùn)到RAM里面,至于處理數(shù)據(jù)也能用DMA完成那是你想得太多了。
回復(fù)

使用道具 舉報(bào)

10#
ID:525244 發(fā)表于 2023-3-8 13:12 來(lái)自手機(jī) | 只看該作者
ADC中斷讀取,每讀取100次,15個(gè)通道。MCU一共進(jìn)入1500次中斷。如果速度不快,或者是沒(méi)有用到其它高頻率的定時(shí)器,沒(méi)問(wèn)題。如果有高頻次中斷,單片機(jī)就會(huì)頻繁進(jìn)入各種中斷,導(dǎo)致單片機(jī)效率不高!如果用DMA,只需要設(shè)置DMA讀取ADC。所有通道都讀完了(前邊的1500次),并且算出平均值,DNA申請(qǐng)一次中斷,MCU只需要取出所有通道ADC的平均值,直接使用就行!就像兩個(gè)CPU,一個(gè)處理你的任務(wù),一個(gè)幫助調(diào)度單片機(jī)硬件。
回復(fù)

使用道具 舉報(bào)

11#
ID:469589 發(fā)表于 2023-3-8 13:43 | 只看該作者
不對(duì)!
DMA傳輸?shù)腁DC,實(shí)際上換是需要ADC中斷處理的,即使DMA中斷是打開(kāi)的,也不能在DMA中斷中處理結(jié)果,只能在ADC完成中斷中處理。。
這個(gè)我做過(guò)試驗(yàn)。好像DMA中斷沒(méi)有用,但實(shí)際也不能關(guān)閉,否則ADC也無(wú)法進(jìn)行。
回復(fù)

使用道具 舉報(bào)

12#
ID:94031 發(fā)表于 2023-3-8 14:37 | 只看該作者
單片機(jī)要有DMA功能,里面要加很多電路,實(shí)現(xiàn)的難度與成本會(huì)增加,所以不是每種單片機(jī)都有DMA_ADC功能,所以不可能不要ADC中斷,另外實(shí)時(shí)性DMA_ADC也不如ADC中斷。
回復(fù)

使用道具 舉報(bào)

13#
ID:644039 發(fā)表于 2023-3-8 15:48 | 只看該作者
在dma通道有限的情況下,adc中斷就起到了作用
回復(fù)

使用道具 舉報(bào)

14#
ID:401564 發(fā)表于 2023-3-8 21:52 | 只看該作者
GlenXu 發(fā)表于 2023-3-8 13:43
不對(duì)!
DMA傳輸?shù)腁DC,實(shí)際上換是需要ADC中斷處理的,即使DMA中斷是打開(kāi)的,也不能在DMA中斷中處理結(jié)果, ...

不需要!設(shè)定好緩沖地址,DMA的結(jié)果就會(huì)一直是最近幾次的結(jié)果
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

16#
ID:146878 發(fā)表于 2023-3-9 12:48 | 只看該作者
如果需要多通道輪詢采樣,那DMA沒(méi)什么必要,要切換通道必須要CPU去做。
回復(fù)

使用道具 舉報(bào)

17#
ID:668004 發(fā)表于 2023-3-14 18:44 | 只看該作者
yuxuesuixing 發(fā)表于 2023-3-9 11:04
DMA你還沒(méi)仔細(xì)理解透徹,他是相當(dāng)于獨(dú)立于cpu外的一個(gè)傳輸數(shù)據(jù)的外設(shè),你可以理解為他只能傳輸數(shù)據(jù)的獨(dú)立CP ...

這位兄弟   大師級(jí)別
回復(fù)

使用道具 舉報(bào)

18#
ID:966089 發(fā)表于 2023-3-16 09:55 | 只看該作者
yuxuesuixing 發(fā)表于 2023-3-9 11:04
DMA你還沒(méi)仔細(xì)理解透徹,他是相當(dāng)于獨(dú)立于cpu外的一個(gè)傳輸數(shù)據(jù)的外設(shè),你可以理解為他只能傳輸數(shù)據(jù)的獨(dú)立CP ...

感謝您的回復(fù)
回復(fù)

使用道具 舉報(bào)

19#
ID:966089 發(fā)表于 2023-3-16 09:58 | 只看該作者
Hephaestus 發(fā)表于 2023-3-7 22:06
DMA可以自動(dòng)的把數(shù)據(jù)從ADC結(jié)果寄存器搬運(yùn)到RAM里面,至于處理數(shù)據(jù)也能用DMA完成那是你想得太多了。

老哥,我說(shuō)的是在DMA中斷程序里讓CPU切入進(jìn)行處理采樣數(shù)據(jù),DMA傳輸中當(dāng)然不能處理數(shù)據(jù)了,這個(gè)我知道,你看錯(cuò)了。感謝您的回復(fù)!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表