<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 設計應用 > Windows CE下基于TSC2101的音頻系統設計

Windows CE下基于TSC2101的音頻系統設計

作者: 時(shí)間:2008-04-10 來(lái)源:網(wǎng)絡(luò ) 收藏

是一個(gè)開(kāi)放的、可裁剪的、32位的實(shí)時(shí)嵌入式操作。它具有可靠性好、實(shí)時(shí)性高、內核體積小的特點(diǎn),所以被廣泛用于各種嵌入式智能設備的開(kāi)發(fā),其應用涉及工業(yè)控制、信息家電、移動(dòng)通信、汽車(chē)電子、個(gè)人電子消費品等各個(gè)領(lǐng)域,是當今應用最多、增長(cháng)最快的嵌入式操作。而在這些嵌入式應用中,模塊成為了大多數產(chǎn)品不可或缺的一部份。本文針對 操作,構造了Intel Xscale PXA272和芯片的系統,并簡(jiǎn)要介紹了其實(shí)現方法。

音頻系統的硬件實(shí)現


中的音頻驅動(dòng)采用Unified Audio模型實(shí)現,Intel Xscale PXA272處理器和TI 的音頻芯片,使用了I2S(Inter-IC Sound)總線(xiàn)的音頻系統體系結構,系統原理圖如圖1所示。Intel Xscale PXA272芯片集成了I2S控制器,通過(guò)I2S總線(xiàn)處理音頻數據。其他信號(如控制信號)則需要單獨傳輸,在本中將Xscale PXA272芯片的SSP串口配置為SPI串口以實(shí)現控制信號的傳輸。

圖1 系統原理圖


I2S是菲利浦公司提出的串行數字音頻總線(xiàn)協(xié)議。PXA272的I2S控制器控制了I2S鏈接,I2S控制器由數據緩沖、狀態(tài)和控制寄存器、計數器組成。它們將系統內存和外設的音頻解碼芯片()連接,產(chǎn)生同步音頻。播放音頻文件時(shí),I2S控制器通過(guò)I2SLINK連接將系統內存中數字化的聲音樣本發(fā)送到外設的TSC2101音頻解碼芯片中,然后由TSC2101芯片的數模轉換器將數字音頻信號轉換成模擬信號。對于錄音來(lái)說(shuō),I2S控制器從外部的TSC2101音頻芯片接收到數字信號,然后將它們存儲到系統內存中。I2S提供了普通I2S和MSB-justified-I2S格式。通過(guò)5根引腳連接TSC2101芯片和PXA272的I2S控制器,形成音頻數據傳輸的通道。I2S控制器必需的信號主要有:一個(gè)碼率時(shí)鐘,可以引用外部或者內部時(shí)鐘源;一個(gè)控制信號提供“左/右”聲道控制信息;兩個(gè)串行音頻引腳,一個(gè)輸出一個(gè)輸入;碼率時(shí)鐘,I2S控制器會(huì )將可選的系統時(shí)鐘信號也發(fā)送到外部解碼器中。


I2S控制器通過(guò)DMA方式來(lái)訪(fǎng)問(wèn)。DMA方式下,DMA控制器只能通過(guò)串行音頻數據寄存器(SADR)訪(fǎng)問(wèn)FIFO。DMA控制器通常以8、16或32字節大小的塊存取FIFO隊列數據的。


中采用的音頻芯片TSC2101集成了立體聲音頻解碼、觸摸屏控制芯片,立體聲DAC能以高達48Kb/s的采樣率播放音頻文件,專(zhuān)供PDA、PMP、智能手機和MP3播放機使用。TSC2101 將揚聲器放大器、耳機放大器和四線(xiàn)觸摸屏控制器與音頻編解碼器集成再一起,帶有一個(gè)立體聲頭戴送受話(huà)器接口、一個(gè)手機送受話(huà)器接口、一個(gè)單聲道8Ω揚聲器放大器以及一個(gè)32Ω受話(huà)器驅動(dòng)器,并集成有一個(gè)電池監控器和一個(gè)片上溫度傳感器。


TSC2101芯片的電路設計如圖2所示。

圖2 TSC2101芯片電路設計


本設計為T(mén)SC2101在智能手機中的運用,CP-IN為通信模塊的語(yǔ)音輸入,CP-OUT則為音頻系統到通信模塊的輸出,在實(shí)際的應用中MIC1可以通過(guò)TSC2101的內部PGA(可編程增益放大)、AGC(自動(dòng)增益控制)電路連接到CP-OUT,實(shí)現智能手機的話(huà)筒功能;同時(shí),MIC1輸入還可以通過(guò)內部的ADC將語(yǔ)音數據采樣后經(jīng)I2S總線(xiàn)傳輸到處理器存儲空間實(shí)現錄音功能。當然,在智能手機通話(huà)的同時(shí),還可以實(shí)現通話(huà)錄音功能。電路圖中的38~41引腳為SPI接口,42~46引腳為I2S控制引腳,引腳9~12為觸摸屏輸入,引腳27和28為音頻輸出可以連接耳機,引腳26連接手機聽(tīng)筒,引腳33、35連接外置揚聲器。


采用Unified Audio模型實(shí)現音頻驅動(dòng)


音頻驅動(dòng)的實(shí)現方式包括MDD-PDD分層模式和不分層的Unified Audio模型。MDD-PDD作為直接實(shí)現流接口的一種方法,使用微軟提供的模型設備驅動(dòng)程序(MDD)庫――Wavemdd.dll。這個(gè)庫根據音頻設備驅動(dòng)程序服務(wù)供應者接口(DDSI)函數來(lái)實(shí)現流接口函數,如果使用了Wavemdd.dll就必須生成一個(gè)匹配的平臺依賴(lài)驅動(dòng)程序(PDD)庫,該庫能實(shí)現音頻DDSI函數,這個(gè)PDD庫通常叫做Wavepdd.lib。然后把兩個(gè)庫連接起來(lái)形成Wavedev.dll。


作為音頻驅動(dòng)的另外一種方法,就是采用Unified Audio模型,即不分層的音頻驅動(dòng)模型,這種模型的音頻驅動(dòng)支持標準的波形驅動(dòng)接口。在本設計中就是使用的這種方式來(lái)實(shí)現音頻驅動(dòng)(Platform Builder的驅動(dòng)目錄下包括有基于這種模型驅動(dòng)的實(shí)例代碼)。在分層的音頻驅動(dòng)中,驅動(dòng)程序由MDD和PDD組成,MDD層執行與硬件平臺無(wú)關(guān)的功能,PDD層則是直接與硬件平臺相關(guān)的操作,而在Unified Audio模型中,MDD和PDD的分層是不必要的,圖3是Unified Audio模型的音頻驅動(dòng)結構。

圖3 Unified Audio模型的音頻驅動(dòng)結構


在這種模型下,音頻驅動(dòng)仍然是以流接口的形式實(shí)現,分別實(shí)現了WAV-close()、WAV-PowerDown()、WAV-Deinit()、 WAV-PowerUp()、WAV-Init()、WAV-Read()、WAV-IOControl()、WAV-Seek()、WAV-Open()、WAV-Write()這幾個(gè)標準的流接口函數。

DMA緩存區設計與實(shí)現


由于音頻設備驅動(dòng)程序設計對設備的實(shí)時(shí)性要求較高,所以DMA緩存區設計以及合理地利用緩存區加快對音頻數據的處理,減少延時(shí)變得十分重要。


DMA控制器是使CPU處理其他與數據總線(xiàn)無(wú)關(guān)的處理,而由DMA控制器負責數據傳輸的機制,這種機制使得CPU從繁重的數據傳輸中解脫出來(lái),可以執行其他計算,從而提高了系統運行速度。PXA272的DMA控制器提供了32個(gè)DMA通道,0~31。這些通道提供了flow-through 和fly by的數據傳輸方式。


在本設計中,使用雙緩存區DMA通道設計,如圖4所示,當CPU正在處理某一個(gè)緩存區數據的同時(shí),DMA控制器可以完成另一個(gè)緩存區數據的傳輸,如此交替下去,則可以提高系統的并行能力,提高音頻處理的實(shí)時(shí)性。


雙緩存區驅動(dòng)程序設計當中,以播音為例,新的音頻數據在CPU的控制下先寫(xiě)到緩存1中,此時(shí)DMA控制器正在處理緩存2的數據傳輸。當緩存2的數據全部傳完之后,會(huì )產(chǎn)生一個(gè)DMA中斷,該中斷通知CPU開(kāi)始往緩存2里寫(xiě)新的音頻數據,與此同時(shí),DMA也繼續處理緩存1的數據。這樣,由于CPU和DMA沒(méi)有處理同一段DMA緩存區,就減少了資源訪(fǎng)問(wèn)的沖突,并且能夠最大程度上保證音頻數據不丟失,提高音頻處理的實(shí)時(shí)性,也提高了系統的并行能力。


本設計中使用MapDMABuffers()函數實(shí)現DMA音頻數據緩存區的分配,函數主要實(shí)現的功能是:分配接收和發(fā)送音頻數據的DMA緩存區。

結束語(yǔ)


本文分析了嵌入式 操作系統基于TSC2101音頻芯片的音頻系統實(shí)現的基本原理及其驅動(dòng)程序模型,并結合具體程序重點(diǎn)描述了DMA雙緩存區的實(shí)現方法和原理。本設計在實(shí)際運用中能夠滿(mǎn)足音頻系統的實(shí)時(shí)性要求,在實(shí)際測試中,緩存區大小設置為0x1000(Bytes),位時(shí)鐘頻率為 2.836MHz,DMA數據傳送的數據大小分別在32B、16B、8B的情況下,播放效果均清晰無(wú)雜音,達到了預期的效果。



關(guān)鍵詞: 系統 設計 音頻 TSC2101 CE 基于 Windows

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>