做音頻處理,音頻處理的資料采用DMA ping pong buffer向I2S FIFO寫資料,這里我有2個疑問:
1:DMA采用回圈模式,搬移完ping buffer之后自動搬移pong buffer,如此回圈往復。我的理解,DMA搬移速度應該遠遠快于I2S的播放速度,DMA自行控制來回搬移會不會有時序上的問題?
2:DMA搬移ping buffer的時候,CPU寫pong buffer,那么DMA在搬移ping buffer的時候,占用總線,CPU如何能寫pong buffer呢,寫也要通過總線的!!!
uj5u.com熱心網友回復:
我理解DMA是硬體實作的,也是有一定的總線,但是他不需要CPU的介入,也就不需要很繁瑣的cpu操作,所以會很快,至于傳輸速度快慢也看是跟誰穿吧,取決于外設,要是mem to mem 那就相當快了uj5u.com熱心網友回復:
這里面有個速率控制需要理解,DMA搬運速度是受I2S 讀/取資料的速率控制的,DMA的速率總是與I2S的速率保持一致,I2S的讀取速率是受時鐘頻率控制的,因此只要配置好了I2S的時鐘頻率,就能控制好播放/錄闡速率。再就是上層物理記憶體的讀寫速率了,alsa里面有讀寫控制,比如播放時會先獲取記憶體可寫的空間大小,如果小于資料量,會等待DMA將資料水泵掉后再寫入,反之亦然。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/125517.html
標籤:驅動開發/核心開發
下一篇:proteus的安裝問題
