王 興,牟衛(wèi)華,王飛雪
(國防科技大學(xué)電子科學(xué)與工程學(xué)院 衛(wèi)星導(dǎo)航定位研發(fā)中心,湖南 長沙410073)
隨著電子技術(shù)的迅猛發(fā)展,嵌入式音頻系統(tǒng)在眾多領(lǐng)域得到了廣泛應(yīng)用。特別是在手持及車載式衛(wèi)星導(dǎo)航用戶終端設(shè)備中,對利用嵌入式音頻系統(tǒng)實現(xiàn)位置、時間等信息的播報、提供語音導(dǎo)航等人機交互功能提出了新的要求。
針對Samsung公司SC2442B型ARM 9處理器良好的實時性能,結(jié)合音頻解碼芯片 WM8983的接口特點,給出了有效、實用的嵌入式音頻系統(tǒng)的硬件電路設(shè)計方案以及基于Windows CE操作系統(tǒng)的驅(qū)動實現(xiàn)。
數(shù)字音頻系統(tǒng)中,通過將已存儲的一串二進制音頻數(shù)據(jù)文件再現(xiàn)原始聲音,采樣頻率越高,所能描述的聲波頻率就越高,取樣頻率和量化精度共同決定聲音還原的質(zhì)量[1]。由于人耳的聽覺范圍是20Hz~20kHz,因此,為了保證音頻的不失真,音頻數(shù)據(jù)的取樣頻率應(yīng)該高于40kHz.
本音頻系統(tǒng)播放.wav格式的音頻文件,WAV格式的文件采用脈沖編碼調(diào)制脈沖(PCM)編碼格式,取樣頻率為44.1kHz,量化值采用16位編碼。
目前,音頻系統(tǒng)通常采用IIS總線通信協(xié)議傳輸音頻數(shù)據(jù),采用串行外設(shè)接口(SPI)、I2C、L3等多種總線方式實現(xiàn)音頻CODEC芯片的控制。
IIS(Inter-IC Sound)總線是 Philips公司提出的串行數(shù)字音頻總線協(xié)議。它是一種面向多媒體的音頻總線,專用于音頻設(shè)備之間的數(shù)據(jù)傳輸,對于其他信號(如控制信號等)需單獨傳輸?;跍p少引腳數(shù)目的目的,IIS總線一般只有3根串行線組成,即分時復(fù)用的數(shù)據(jù)通道線(Serial Data)、字選擇線(Word Select)、和時鐘線 (Serial Clock)[2-4]。
如圖1所示,嵌入式音頻系統(tǒng)由S3C2442B及WM8983芯片構(gòu)成。ARM處理器完成音頻文件的讀取,音頻芯片控制信號的生成,并完成人機交互等功能。音頻芯片完成音頻的編解碼、模數(shù)轉(zhuǎn)換、信號調(diào)理等功能,通過IIS總線傳輸音頻數(shù)據(jù),通過I2C總線實現(xiàn)對音頻CODEC芯片的控制。
S3C2442B是Samsung公司推出的一款16/32位嵌入式微處理器,該處理器內(nèi)部集成了ARM公司的ARM920T處理器內(nèi)核,內(nèi)置IIS音頻總線接口,有4路動態(tài)內(nèi)存分配(DMA)通 道[5]。S3C2442B同時支持LCD控制,在高性能和低功耗等特性方面具有極大的優(yōu)勢,便于可視化嵌入式移動設(shè)備的開發(fā),實現(xiàn)人機交互等功能。
圖1 系統(tǒng)框圖
WM8983是Wolfson公司的一款高性能立體聲音頻編解碼CODEC芯片。該芯片體積小、功耗低;支持IIS總線數(shù)據(jù)格式,采用位元流單元轉(zhuǎn)換技術(shù)進行信號處理,完成聲音信號的模數(shù)轉(zhuǎn)換;具有可編程增益放大器和數(shù)字自動增益控制器;同時支持兩線(IIC)和三線音頻控制接口模式,控制接口實現(xiàn)簡單[6]。
設(shè)計的音頻系統(tǒng)的硬件電路如圖2所示,將ARM處理器的IIS信號接口與WM8983的IIS信號直接相連,實現(xiàn)音頻數(shù)據(jù)的傳輸。將S3C2442B的3根通用輸入輸出(GPIO)信號連接到音頻CODEC的控制接口,可以通過模擬I2C總線及3線控制的時序和協(xié)議,實現(xiàn)音頻控制,同時利用S3C2442B的GPIO管腳選擇音頻芯片的控制模式。
圖2 WM8983硬件電路設(shè)計
在音頻CODEC硬件電路設(shè)計時,要充分考慮到音頻電路模擬電路與數(shù)字電路混合設(shè)計的特點,將模擬電源與數(shù)字電源隔離,以降低數(shù)字電路對于音頻電路的影響,提高音頻播放質(zhì)量。同時本音頻設(shè)計基于移動導(dǎo)航嵌入式用戶終端開發(fā),在設(shè)計實現(xiàn)布局中,還需要著重考慮音頻信號對于導(dǎo)航信號接收性能的影響,對音頻模塊與導(dǎo)航信號射頻接收前端進行必要的屏蔽與隔離。
軟件驅(qū)動程序的主要任務(wù)是將操作系統(tǒng)和外圍的硬件設(shè)備有機的結(jié)合在一起,為音頻應(yīng)用提供標(biāo)準(zhǔn)的接口。
所采用的 Windows CE(WinCE)系統(tǒng)是微軟公司的一種搶先式、多任務(wù)、實時32位的嵌入式實時操作系統(tǒng),內(nèi)置了媒體功能,支持多種嵌入式硬件體系結(jié)構(gòu),具有模塊功能的可裁剪性和可移植性,且運行高效、穩(wěn)定,廣泛應(yīng)用于嵌入式產(chǎn)品開發(fā)之中[7]
在音頻驅(qū)動設(shè)計實現(xiàn)中采用通用的流接口形式實現(xiàn),應(yīng)用程序通過文件系統(tǒng)的方式訪問驅(qū)動程序,流接口的驅(qū)動架構(gòu)如圖3所示。
圖3 WinCE流接口驅(qū)動架構(gòu)[7]
在音頻驅(qū)動設(shè)計實現(xiàn)中采用統(tǒng)一音頻驅(qū)動模型(Unified Audio),可以很好的解決單體驅(qū)動程序系統(tǒng)效率低的制約,打破傳統(tǒng)基于設(shè)備模型驅(qū)動(Model Device Drive,MDD)和平臺相關(guān)驅(qū)動(Platform Dependent Driver,PDD)[8]分層約束,提供了一種更為靈活的方式來實現(xiàn)處理器與音頻文件之間的交互。
音頻設(shè)備的初始化是整個音頻驅(qū)動程序的開始部分,包括對ARM處理器IIS數(shù)據(jù)格式、位時鐘、取樣時鐘的設(shè)置以及WM8983音頻芯片相關(guān)寄存器的初始化等。
IIS接口初始化通過函數(shù)IIS_INIT()實現(xiàn),將GPE[0:5]設(shè)置成為IIS接口,同時配置IIS的寄存器。通過設(shè)置ARM寄存器rIISCON=0x3F,進行IIS接口、DMA使能、IIS內(nèi)部及外部時鐘預(yù)分頻因子寄存器等使能;設(shè)置rIISMOD=0x74,進行主從模式、主器件時鐘、數(shù)據(jù)格式等的設(shè)定;設(shè)置IISPSR=0x55內(nèi)部及外部時鐘分頻因子;設(shè)置rIISFCON=0xF000,進行接收和發(fā)送先入先出隊列(FIFO)工作模式選擇及使能。
WM8983的初始化通過函數(shù) WM8983_INIT()函數(shù)實現(xiàn),首先設(shè)置音頻控制模式,選擇IIC控制模式,通過IIC設(shè)置WM8983中的寄存器,實現(xiàn)對芯片的初始化設(shè)置。
Samsung公司的ARM芯片中,為了實現(xiàn)雙工模式,使用了兩條串行數(shù)據(jù)線,分別作為輸入和輸出。此外還提供三種數(shù)據(jù)傳輸模式[5]:
1)正常工作模式:該模式基于FIFO寄存器,處理器(CPU)通過輪詢的方式訪問FIFO寄存器,以IISCON寄存器的第七位作為特征位標(biāo)記接受和發(fā)送FIFO寄存器的狀態(tài),進而控制CPU讀寫FIFO。
2)DMA模式:該模式下通過設(shè)置IISFCON寄存器可以使IIS接口竊取總線控制權(quán),從而與系統(tǒng)隨機存儲器(RAM)進行數(shù)據(jù)交換,提高了系統(tǒng)的吞吐能力。
3)傳輸/接收模式:該模式下,IIS總線接口通過雙通道DMA同時接收和發(fā)送音頻數(shù)據(jù)。
音頻系統(tǒng)通常播放WAV 格式的音頻文件,數(shù)據(jù)量較大,因此,采用傳輸/接收模式的作為IIS數(shù)據(jù)傳輸模式,使用兩路DMA通道,通道1作為數(shù)據(jù)接收數(shù)據(jù)通道,通道2作為發(fā)送數(shù)據(jù)通道。但是,由于S3C2442B處理器中沒有內(nèi)置的DMA緩存區(qū),在驅(qū)動程序設(shè)計時,必須在S3C2442B的同步動態(tài)隨機處理器(SDRAM)中為音頻文件分配DMA緩存區(qū)[9-10]。
采用雙緩存區(qū)設(shè)置,對音頻系統(tǒng)的輸入與輸出同時分配相應(yīng)的緩存區(qū),這樣驅(qū)動程序可以在音頻工作的同時處理傳輸進來的音頻數(shù)據(jù),很好的提高了系統(tǒng)并行處理的能力。同時,在驅(qū)動程序中使用了環(huán)形、多段緩存的優(yōu)化設(shè)計機制[9],在這種機制下,將緩存區(qū)分割成若干個大小相同的塊,通過驅(qū)動程序循環(huán)調(diào)用,從而解決在音頻數(shù)據(jù)量較大時產(chǎn)生聲音延時以及聲音失真的問題,保證了聲音的流暢播放。
WM8983支持兩種控制模式:兩線模式和三線模式,并通過模式選擇(MODE)(PIN18)選擇音頻控制模式,當(dāng)MODE管腳輸入為高時,選擇三線控制模式;MODE設(shè)置為低選擇兩線模式[6]。
三線模式采用連續(xù)控制接口實現(xiàn),利用CSB管腳產(chǎn)生鎖存(LATCH)信號標(biāo)志寄存器的讀寫。其邏輯圖如圖4所示。
圖4 三線控制模式接口時序圖
WM8983支持的兩線控制模式即為I2C總線協(xié)議,有確定的7bit器件地址:0011010。處理器通過串行同步時鐘(SCLK)和串行數(shù)據(jù)(SDIN)控制芯片中寄存器的讀寫。在SCLK信號為高時,SDIN從高電平轉(zhuǎn)換到低電平,產(chǎn)生起始位(START)標(biāo)志,啟動地址傳輸。然后處理器伴隨著SCLK傳輸8bit數(shù)據(jù)信號(7bit地址信號和1bit讀寫控制信號),WM8983在確認(rèn)接收的7bit寄存器地址有效后,在下一個SCLK時給出低電平的應(yīng)答信號(ACK),處理器在收到WM8983的應(yīng)答信號后,發(fā)送高位8bit控制數(shù)據(jù)信號(B15-B8),WM8983收到8bit數(shù)據(jù)信號后會再次給出低電平應(yīng)答信號,處理器應(yīng)答信號后,發(fā)送低8bit控制數(shù)據(jù)(B7-B0),WM8983在收到所有數(shù)據(jù)信號,并進行相應(yīng)的操作,給出應(yīng)答信號。傳輸結(jié)束后,SCLK信號為高,SDIN從低電平轉(zhuǎn)換到高電平,產(chǎn)生結(jié)束位(STOP)標(biāo)志。如圖5所示:
圖5 兩線控制模式接口時序圖
I2C總線控制模式通常又分為寄存器方式和I/O模擬方式兩種。其中I/O模擬方式方便系統(tǒng)驅(qū)動的移植,應(yīng)用也更為廣泛。采用I/O模擬方式的I2C總線模式實現(xiàn)對音頻系統(tǒng)的控制。通過函數(shù)static void SetWMRegister(U32addr,U32data)實現(xiàn),采用I/O模擬I2C總線時,需要在每一個操作后增加一個系統(tǒng)延時,以滿足總線時序要求。
音頻系統(tǒng)應(yīng)用在基于WinCE5.0嵌入式操作系統(tǒng)的導(dǎo)航軟件應(yīng)用程序之中。在開發(fā)過程中,將音頻驅(qū)動作為動態(tài)鏈接庫,生成.dll庫文件。導(dǎo)航軟件通過調(diào)用音頻驅(qū)動程序播放已經(jīng)存儲在嵌入式設(shè)備上的WAV格式文件。
導(dǎo)航軟件與驅(qū)動程序之間的音頻狀態(tài)設(shè)置及讀取通過下面兩個函數(shù)實現(xiàn):
short SoundStateSet(IN short sSoundState,IN bool bSwitch,IN const char*strBootSound-Path);
short Sound StateGet (OUT short&sSoundState, OUT bool &bSwitch, OUT const char* &strBoot Sound Path);
圖6 導(dǎo)航軟件聲音設(shè)置界面
嵌入式應(yīng)用程序開發(fā)采用Embedded Visual C++4.0。導(dǎo)航軟件通過中斷請求調(diào)用音頻驅(qū)動程序,完成語音功能的實現(xiàn),同時提供人機交互界面,用戶可通過顯示屏及按鍵控制音頻系統(tǒng)聲音大小,如圖6所示。
結(jié)合嵌入式導(dǎo)航移動用戶終端設(shè)備研制,設(shè)計實現(xiàn)了基于S3C2442B和WM8983的嵌入式音頻系統(tǒng),開發(fā)了基于 WinCE驅(qū)動程序,并提供了與導(dǎo)航軟件的接口。該音頻系統(tǒng)已成功應(yīng)用于衛(wèi)星導(dǎo)航用戶終端嵌入式設(shè)備之中,可以很好的滿足手持式導(dǎo)航設(shè)備要求的語音導(dǎo)航及位置信息播報等語音交互功能。
[1]胡力剛,許偉明.基于S3C2410和UDA1314TS的嵌入式音頻系統(tǒng)設(shè)計[J].計算機測量與控制,2009,17(12):2510-2512,2515.
[2]魏趙平.基于ARM的嵌入式系統(tǒng)研究及音頻驅(qū)動實現(xiàn) [D].陜西:西安電子科技大學(xué),2007
[3]詹群峰,李靈杰,葉利福,等.基于嵌入式Linux的音頻系統(tǒng)[J].計算機系統(tǒng)應(yīng)用,2009(10):204-207.
[4]高建華,王 殊.基于S3C2410型微處理器和UDA1341型立體聲音頻編碼器的嵌入式音頻系統(tǒng)設(shè)計[J].國外電子元器件,2006(6):35-39.
[5]Sumsung Electronics.SC32442BUser′s Manual Revision 1.2[S].South Korea,2002.
[6]Wolfson microelectronics.WM8983Datasheet,Rev4.1[S].United Kingdom,2008.
[7]羅家兵,騰少華,張 巍,等.Wince.net下流接口驅(qū)動研究與實現(xiàn)[J].微計算機信息,2007,23(17):229-230,292.
[8]顧崢浩,王自強,聶文華.WinCE流驅(qū)動程序設(shè)計概述[J].微處理機,2007(3):81-83.
[9]彭 莉.嵌入式SoC中DMA的設(shè)計與應(yīng)用 [D].上海:上海交通大學(xué),2005.
[10]徐 睿,李 婓,王申康.基于IIS總線的嵌入式音頻系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2004.30(4):7-9.