本文實現從aic32的line-input獲得音頻資料並在line-output播放,使用McBSP和EDMA來高效的傳輸資料,避免DSP的高負載。
資料轉送:
codec與DSP通過McBSP2傳輸資料。EDMA配置為儲存每個到達McBSP2的16位元signed語音採樣資料在記憶體緩衝區內,之後會被處理。處理之後EDMA控制器回送資料到McBSP2進行發送。
McBSP1設定為配置/控制AIC23。AIC23從McBSP1接收串列配置參數如音量、採樣率和資料格式。
可以使用乒乓資料緩衝和linked-EDMA傳輸來更方便高效的傳輸資料。單個資料緩衝來接收發送資料很不方便,因為要避免新到達資料覆蓋進行中傳輸的資料。乒乓資料緩衝使用兩個資料緩衝,當乓緩衝正在填滿時,乒緩衝肯定不會被覆蓋,可以對其進行處理。可以使用接收發送各兩個共四個緩衝進行乒乓傳輸。
在這種情況下,對於每個緩衝,EDMA控制器的配置都要有所不同。當一個緩衝填滿後,EDMA控制器產生一個中斷,中斷處理常式/interrupt-handler必須在下一個音頻採樣資料到達之前為下一個緩衝重新載入配置。EDMA的linked-transfer特性可以輕鬆的做到這一點:每個配置都預先設定,在當前配置結束後EDMA控制器自動載入下一個配置;這樣同樣產生中斷訊號,但它僅用來通知DSP可以處理資料了。唯一的約束條件是,當前緩衝填滿之前所有的音頻資料必須處理結束;這段時間遠遠大於音頻採樣間隔。應用這種方法,系統更容易達到即時處理要求。
程式說明:
程式運行過程中,DSP/BIOS首先初始化,main()函數作為主進程啟動。本文中,它主要實現程式初始化並開啟EDMA資料轉送。當main()函數運行結束後,由DSP/BIOS接管,為中斷程式服務。
當一個緩衝填滿後, edmaHwi()中斷服務子程式/ISR被調用,其中pingOrPong 狀態變數標識此緩衝是乒或乓。dmaHwi把緩衝標記標識為相對的/相反的緩衝,並調用非強制中斷進程processBuffer 處理音頻資料。
其他程式:blinkLED()當對應的開關按下時以2Hz頻率閃燈,是周期為500ticks的周期進程。load()在另一個對應的開關按下時類比20-25%的虛載荷,是周期10ms的周期進程。
代碼之後補上