標(biāo)題: 請(qǐng)教一個(gè)WS2812ELD數(shù)據(jù)傳輸問(wèn)題 [打印本頁(yè)]

作者: 芙蓉焊料    時(shí)間: 2024-11-17 13:32
標(biāo)題: 請(qǐng)教一個(gè)WS2812ELD數(shù)據(jù)傳輸問(wèn)題
很多控制ws2812的程序是spi+DMA實(shí)現(xiàn)的,請(qǐng)問(wèn)不使用DMA功能實(shí)現(xiàn)ws2812的控制有什么區(qū)別呢?
謝謝!

作者: lkc8210    時(shí)間: 2024-11-17 22:08
DMA可以釋放芯片的算力
一顆WS2812 24位元的數(shù)據(jù)耗時(shí)1.3us X 24 = 31.2us
如果數(shù)量少不用DMA也可以
但如果數(shù)量一多起來(lái)
耗時(shí)很久,嚴(yán)重堵塞芯片運(yùn)行
作者: zhuls    時(shí)間: 2024-11-18 21:53
DMA可是好東西!
DMA,是“直接內(nèi)存訪問(wèn)”的E文縮寫(xiě),即“Direct Memory Access”的首字連起來(lái)的。。
在大規(guī)模的數(shù)據(jù)搬運(yùn)時(shí),都會(huì)采用這種方式,除非你用的MCU沒(méi)有這個(gè)功能。
常見(jiàn)的有3種數(shù)據(jù)傳輸模式:外設(shè)到內(nèi)存,內(nèi)存到外設(shè),內(nèi)存到內(nèi)存。
樓主控制WS2812,可選用“內(nèi)存到外設(shè)”,即把數(shù)據(jù)準(zhǔn)備好,就可以激發(fā)DMA,開(kāi)始自動(dòng)通過(guò)SPIx往外發(fā)送數(shù)據(jù)。
燈串有200個(gè)LED燈珠,每珠24bit,按2812的時(shí)序,每珠約耗時(shí)30us,200珠需約6ms...
因?yàn)?812的數(shù)據(jù)傳輸時(shí)不能被打斷,所以在這6ms的時(shí)間內(nèi)什么事都做不了,只能等數(shù)據(jù)完全發(fā)完。。
用上DMA,你只要開(kāi)一個(gè)600byte的緩存區(qū),數(shù)據(jù)準(zhǔn)備好后,激發(fā)DMA就OK了,DMA發(fā)完數(shù)據(jù)會(huì)給你一個(gè)中斷...
其間你還可以檢測(cè)按健、做ADC動(dòng)作....

如樓上所說(shuō),DMA在傳輸數(shù)據(jù)時(shí),數(shù)據(jù)量越大,效果越明顯,少量數(shù)據(jù)的話,用不用DMA沒(méi)啥區(qū)別。


https://m.bilibili.com/video/BV18CUxYJEnw?buvid=XU41BF74046114B601AC24A729FB5CAC6AF03(1.54和2.0的4線SPI屏)

前50次沒(méi)有用DMA,后50次用上了DMA,效果天差地別。。
這個(gè)示例與樓主這個(gè)沒(méi)多大關(guān)系,但DMA確實(shí)好用











作者: Y_G_G    時(shí)間: 2024-11-18 22:39
WS2812時(shí)序并不是特別的嚴(yán)格,但卻不能被中斷打斷,不然,燈的著色很容易是一個(gè)古怪的,并不是你想的著色
所以,在寫(xiě)稿時(shí),要先關(guān)閉中斷,中斷本身就是為"意外"準(zhǔn)備的,如果你關(guān)閉了,就有可能會(huì)丟失某個(gè)意外
而且,寫(xiě)入也是要時(shí)間的,如果你有幾百個(gè)燈的話,就能明顯的感覺(jué)到單片機(jī)卡了
但如果用了DMA就不同了,我就不百度DMA是什么了,反正沒(méi)有上面的缺點(diǎn)就是了
作者: 芙蓉焊料    時(shí)間: 2024-11-19 07:14
zhuls 發(fā)表于 2024-11-18 21:53
DMA可是好東西!
DMA,是“直接內(nèi)存訪問(wèn)”的E文縮寫(xiě),即“Direct Memory Access”的首字連起來(lái)的。。
在 ...

謝謝解答,是RGB-3字節(jié)X200==600byte吧?只是現(xiàn)在不知道怎樣準(zhǔn)備數(shù)據(jù)!看了視頻效果不錯(cuò)!!
作者: coody_sz    時(shí)間: 2024-11-19 10:36
比如控制1000個(gè)燈,耗時(shí)30ms,如果不用DMA,則驅(qū)動(dòng)時(shí)MCU全部或大部分時(shí)間都耗在輸出驅(qū)動(dòng)上了,而DMA可以省去這個(gè)時(shí)間。




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