Windows CE下基于TSC2101的音頻系統(tǒng)設計
Windows CE是一個開放的、可裁剪的、32位的實時嵌入式操作系統(tǒng)。它具有可靠性好、實時性高、內核體積小的特點,所以被廣泛用于各種嵌入式智能設備的開發(fā),其應用涉及工業(yè)控制、信息家電、移動通信、汽車電子、個人電子消費品等各個領域,是當今應用最多、增長最快的嵌入式操作系統(tǒng)。而在這些嵌入式應用中,音頻模塊成為了大多數(shù)產(chǎn)品不可或缺的一部份。本文針對Windows CE操作系統(tǒng),構造了基于Intel Xscale PXA272和TSC2101音頻芯片的音頻系統(tǒng),并簡要介紹了其實現(xiàn)方法。
音頻系統(tǒng)的硬件實現(xiàn)
本設計中的音頻驅動采用Unified Audio模型實現(xiàn),基于Intel Xscale PXA272處理器和TI 的TSC2101音頻芯片,使用了基于I2S(Inter-IC Sound)總線的音頻系統(tǒng)體系結構,系統(tǒng)原理圖如圖1所示。Intel Xscale PXA272芯片集成了I2S控制器,通過I2S總線處理音頻數(shù)據(jù)。其他信號(如控制信號)則需要單獨傳輸,在本設計中將Xscale PXA272芯片的SSP串口配置為SPI串口以實現(xiàn)控制信號的傳輸。
圖1 系統(tǒng)原理圖
I2S是菲利浦公司提出的串行數(shù)字音頻總線協(xié)議。PXA272的I2S控制器控制了I2S鏈接,I2S控制器由數(shù)據(jù)緩沖、狀態(tài)和控制寄存器、計數(shù)器組成。它們將系統(tǒng)內存和外設的音頻解碼芯片(TSC2101)連接,產(chǎn)生同步音頻。播放音頻文件時,I2S控制器通過I2SLINK連接將系統(tǒng)內存中數(shù)字化的聲音樣本發(fā)送到外設的TSC2101音頻解碼芯片中,然后由TSC2101芯片的數(shù)模轉換器將數(shù)字音頻信號轉換成模擬信號。對于錄音來說,I2S控制器從外部的TSC2101音頻芯片接收到數(shù)字信號,然后將它們存儲到系統(tǒng)內存中。I2S提供了普通I2S和MSB-justified-I2S格式。通過5根引腳連接TSC2101芯片和PXA272的I2S控制器,形成音頻數(shù)據(jù)傳輸?shù)耐ǖ?。I2S控制器必需的信號主要有:一個碼率時鐘,可以引用外部或者內部時鐘源;一個控制信號提供“左/右”聲道控制信息;兩個串行音頻引腳,一個輸出一個輸入;碼率時鐘,I2S控制器會將可選的系統(tǒng)時鐘信號也發(fā)送到外部解碼器中。
I2S控制器通過DMA方式來訪問。DMA方式下,DMA控制器只能通過串行音頻數(shù)據(jù)寄存器(SADR)訪問FIFO。DMA控制器通常以8、16或32字節(jié)大小的塊存取FIFO隊列數(shù)據(jù)的。
本設計中采用的音頻芯片TSC2101集成了立體聲音頻解碼、觸摸屏控制芯片,立體聲DAC能以高達48Kb/s的采樣率播放音頻文件,專供PDA、PMP、智能手機和MP3播放機使用。TSC2101 將揚聲器放大器、耳機放大器和四線觸摸屏控制器與音頻編解碼器集成再一起,帶有一個立體聲頭戴送受話器接口、一個手機送受話器接口、一個單聲道8Ω揚聲器放大器以及一個32Ω受話器驅動器,并集成有一個電池監(jiān)控器和一個片上溫度傳感器。
TSC2101芯片的電路設計如圖2所示。
圖2 TSC2101芯片電路設計
本設計為TSC2101在智能手機中的運用,CP-IN為通信模塊的語音輸入,CP-OUT則為音頻系統(tǒng)到通信模塊的輸出,在實際的應用中MIC1可以通過TSC2101的內部PGA(可編程增益放大)、AGC(自動增益控制)電路連接到CP-OUT,實現(xiàn)智能手機的話筒功能;同時,MIC1輸入還可以通過內部的ADC將語音數(shù)據(jù)采樣后經(jīng)I2S總線傳輸?shù)教幚砥鞔鎯臻g實現(xiàn)錄音功能。當然,在智能手機通話的同時,還可以實現(xiàn)通話錄音功能。電路圖中的38~41引腳為SPI接口,42~46引腳為I2S控制引腳,引腳9~12為觸摸屏輸入,引腳27和28為音頻輸出可以連接耳機,引腳26連接手機聽筒,引腳33、35連接外置揚聲器。
采用Unified Audio模型實現(xiàn)音頻驅動
音頻驅動的實現(xiàn)方式包括MDD-PDD分層模式和不分層的Unified Audio模型。MDD-PDD作為直接實現(xiàn)流接口的一種方法,使用微軟提供的模型設備驅動程序(MDD)庫――Wavemdd.dll。這個庫根據(jù)音頻設備驅動程序服務供應者接口(DDSI)函數(shù)來實現(xiàn)流接口函數(shù),如果使用了Wavemdd.dll就必須生成一個匹配的平臺依賴驅動程序(PDD)庫,該庫能實現(xiàn)音頻DDSI函數(shù),這個PDD庫通常叫做Wavepdd.lib。然后把兩個庫連接起來形成Wavedev.dll。
作為音頻驅動的另外一種方法,就是采用Unified Audio模型,即不分層的音頻驅動模型,這種模型的音頻驅動支持標準的波形驅動接口。在本設計中就是使用的這種方式來實現(xiàn)音頻驅動(Platform Builder的驅動目錄下包括有基于這種模型驅動的實例代碼)。在分層的音頻驅動中,驅動程序由MDD和PDD組成,MDD層執(zhí)行與硬件平臺無關的功能,PDD層則是直接與硬件平臺相關的操作,而在Unified Audio模型中,MDD和PDD的分層是不必要的,圖3是Unified Audio模型的音頻驅動結構。
圖3 Unified Audio模型的音頻驅動結構
在這種模型下,音頻驅動仍然是以流接口的形式實現(xiàn),分別實現(xiàn)了WAV-close()、WAV-PowerDown()、WAV-Deinit()、 WAV-PowerUp()、WAV-Init()、WAV-Read()、WAV-IOControl()、WAV-Seek()、WAV-Open()、WAV-Write()這幾個標準的流接口函數(shù)。
DMA緩存區(qū)設計與實現(xiàn)
由于音頻設備驅動程序設計對設備的實時性要求較高,所以DMA緩存區(qū)設計以及合理地利用緩存區(qū)加快對音頻數(shù)據(jù)的處理,減少延時變得十分重要。
DMA控制器是使CPU處理其他與數(shù)據(jù)總線無關的處理,而由DMA控制器負責數(shù)據(jù)傳輸?shù)臋C制,這種機制使得CPU從繁重的數(shù)據(jù)傳輸中解脫出來,可以執(zhí)行其他計算,從而提高了系統(tǒng)運行速度。PXA272的DMA控制器提供了32個DMA通道,0~31。這些通道提供了flow-through 和fly by的數(shù)據(jù)傳輸方式。
在本設計中,使用雙緩存區(qū)DMA通道設計,如圖4所示,當CPU正在處理某一個緩存區(qū)數(shù)據(jù)的同時,DMA控制器可以完成另一個緩存區(qū)數(shù)據(jù)的傳輸,如此交替下去,則可以提高系統(tǒng)的并行能力,提高音頻處理的實時性。
雙緩存區(qū)驅動程序設計當中,以播音為例,新的音頻數(shù)據(jù)在CPU的控制下先寫到緩存1中,此時DMA控制器正在處理緩存2的數(shù)據(jù)傳輸。當緩存2的數(shù)據(jù)全部傳完之后,會產(chǎn)生一個DMA中斷,該中斷通知CPU開始往緩存2里寫新的音頻數(shù)據(jù),與此同時,DMA也繼續(xù)處理緩存1的數(shù)據(jù)。這樣,由于CPU和DMA沒有處理同一段DMA緩存區(qū),就減少了資源訪問的沖突,并且能夠最大程度上保證音頻數(shù)據(jù)不丟失,提高音頻處理的實時性,也提高了系統(tǒng)的并行能力。
本設計中使用MapDMABuffers()函數(shù)實現(xiàn)DMA音頻數(shù)據(jù)緩存區(qū)的分配,函數(shù)主要實現(xiàn)的功能是:分配接收和發(fā)送音頻數(shù)據(jù)的DMA緩存區(qū)。
結束語
本文分析了嵌入式Windows CE操作系統(tǒng)基于TSC2101音頻芯片的音頻系統(tǒng)實現(xiàn)的基本原理及其驅動程序模型,并結合具體程序重點描述了DMA雙緩存區(qū)的實現(xiàn)方法和原理。本設計在實際運用中能夠滿足音頻系統(tǒng)的實時性要求,在實際測試中,緩存區(qū)大小設置為0x1000(Bytes),位時鐘頻率為 2.836MHz,DMA數(shù)據(jù)傳送的數(shù)據(jù)大小分別在32B、16B、8B的情況下,播放效果均清晰無雜音,達到了預期的效果。
評論