1引言
隨著Internet技術(shù)和多媒體技術(shù)的快速發(fā)展,,語(yǔ)音通信技術(shù)的應(yīng)用越來(lái)越廣泛,,也越來(lái)越受到重視[1],。如今的嵌人式設(shè)備日益復(fù)雜化,功能比以前更加豐富,,性能也越來(lái)越高,。在多種嵌人式終端產(chǎn)品中,音頻處理功能已成為不可缺少的重要組成部分,,高質(zhì)量的音效是當(dāng)前發(fā)展的重要趨勢(shì),。
本文利用ATMEL公司的AT91RM9200型微處理器和Philips公司的UDA1341型立體聲音頻編解碼器設(shè)計(jì)了一種嵌入式音頻系統(tǒng)。該嵌入式音頻系統(tǒng)硬件部分采用基于IIS總線(xiàn)的音頻系統(tǒng)體系結(jié)構(gòu),,其主要硬件電路后文作了詳細(xì)的介紹,。軟件上,筆者以嵌入式Linux操作系統(tǒng)作為平臺(tái),,重點(diǎn)介紹該音頻系統(tǒng)在此平臺(tái)下的驅(qū)動(dòng)程序的實(shí)現(xiàn),。
2AT91RM9200處理器簡(jiǎn)介
AT91RM9200是ATMEL公司針對(duì)系統(tǒng)控制以及通信領(lǐng)域推出的基于ARM920T內(nèi)核的新型微處理器[2],在高性能和低功耗特性方面具有極大的優(yōu)勢(shì),,而且具有很高的主頻,,最高可達(dá)到180MHz。該處理器具有獨(dú)立的16K指令和16K數(shù)據(jù)cache,,全功能的MMU虛擬內(nèi)存管理單元,,以及內(nèi)部的16KBSRAM和128KBROM,EBI接口控制器,。片上集成了豐富的外圍接口,,包括網(wǎng)絡(luò)MAC、USB控制器,、SDRAM控制器,、CF接口、NANDflash接口,、IIC接口,、JTAG調(diào)試器以及支持256MB的地址空間。而且處理器還提供自舉模式,,供用戶(hù)寫(xiě)入引導(dǎo)代碼,,方便Linux等操作系統(tǒng)的移植。
3UDA1341TS音頻芯片及IIS總線(xiàn)簡(jiǎn)介
PHILIPS公司的UDA1341TS是一塊功能強(qiáng)大的專(zhuān)用語(yǔ)音處理芯片[3],。該芯片集語(yǔ)音放大,、濾波、采樣、A/D和D/A轉(zhuǎn)換等功能于一體,,并且能進(jìn)行數(shù)字語(yǔ)音處理,。本設(shè)計(jì)使用的AT91RM9200處理器具有一個(gè)IIS音頻接口,此接口采用DMA方式傳輸數(shù)據(jù),。在該方式下,,由DMA控制器取代CPU,獲得總線(xiàn)控制權(quán),,從而實(shí)現(xiàn)內(nèi)存與外設(shè)或者內(nèi)存之間的不同區(qū)域之間大量數(shù)據(jù)的快速傳輸,。用DMA接口傳輸數(shù)據(jù),不僅可以降低CPU負(fù)擔(dān),,還可以節(jié)省系統(tǒng)的軟件設(shè)計(jì)時(shí)間,,降低編程難度。而UDA1341TS支持IIS總線(xiàn)格式,,并且具有數(shù)字語(yǔ)音處理特性,,由此決定了UDA1341TS與AT91RM9200處理器的電路連接比較簡(jiǎn)單,并且能實(shí)現(xiàn)語(yǔ)音的A/D和D/A等預(yù)處理,,而不需要再額外增加專(zhuān)門(mén)的A/D和D/A器件,。
需要說(shuō)明的是,數(shù)字音頻系統(tǒng)需要多種多樣的集成電路,,因此,,為這些電路提供一個(gè)標(biāo)準(zhǔn)的通信協(xié)議非常重要。IIS總線(xiàn)是由SONY和PHILIPS公司等電子巨頭共同提出的數(shù)字音頻總線(xiàn)協(xié)議,,全稱(chēng)是內(nèi)部集成電路聲音總線(xiàn)(InterICSoundBus),,它是一種串行的數(shù)字音頻總線(xiàn)協(xié)議,,該總線(xiàn)專(zhuān)門(mén)用于音頻設(shè)備之間的數(shù)據(jù)傳輸,,為數(shù)字立體聲提供一個(gè)序列連接至標(biāo)準(zhǔn)編解碼器[4],,目前很多音頻芯片和處理器都提供了對(duì)IIS總線(xiàn)的支持。筆者根據(jù)IIS總線(xiàn)的原理,,結(jié)合AT91RM9200處理器和數(shù)字音頻輸入/輸出接口芯片UDA1341TS的結(jié)構(gòu)特點(diǎn),,設(shè)計(jì)的嵌入式音頻系統(tǒng)可以運(yùn)用到很多類(lèi)似的音頻系統(tǒng)中。
4系統(tǒng)硬件設(shè)計(jì)方案
由于IIS總線(xiàn)只處理音頻數(shù)據(jù),,而其他的信號(hào)如編碼,、控制等信號(hào)單獨(dú)傳送。為了使必需的引腳數(shù)最小并且保持連線(xiàn)簡(jiǎn)單,,IIS總線(xiàn)由3條信號(hào)線(xiàn)組成:時(shí)分復(fù)用的數(shù)據(jù)通道線(xiàn),、字段選擇線(xiàn)和時(shí)鐘信號(hào)線(xiàn)。本系統(tǒng)由系統(tǒng)主控制器提供時(shí)鐘信號(hào),,控制數(shù)字音頻數(shù)據(jù)在各個(gè)IC之間的流向,。此時(shí),,發(fā)送器在外部時(shí)鐘信號(hào)的控制下產(chǎn)生數(shù)據(jù),處于從模式,。
本設(shè)計(jì)硬件連接圖比較簡(jiǎn)單,,如圖1所示。圖中的處理器采用了AT91RM9200處理器,,其內(nèi)置IIS音頻總線(xiàn),,內(nèi)置的IIS接口能讀取IIS總線(xiàn)上的數(shù)據(jù),并由UDA1341TS芯片外擴(kuò),,通過(guò)總線(xiàn)和系統(tǒng)連接,需要處理器提供系統(tǒng)時(shí)鐘和3根控制線(xiàn),。
AT91RM9200的IIS控制器由5個(gè)引腳與外部的音頻編解碼器相連,。這些引腳分別是:系統(tǒng)時(shí)鐘;位速率時(shí)鐘(可使用內(nèi)部或外部時(shí)鐘源);字段選擇;串行聲音輸入;串行聲音輸出。本設(shè)計(jì)中,,UDA1341TS使用的是L3接口,,該接口用來(lái)控制音頻信號(hào)的音量大小以及低音等。L3接口有3個(gè)信號(hào):L3MODE,,L3CLK,,L3DATA,將字節(jié)寫(xiě)入L3總線(xiàn)寄存器,。IIS總線(xiàn)控制器通過(guò)軟件控制AT91RM9200的通用I/O引腳(筆者選用的是PA0,、PA1、PA2三個(gè)通用I/O口)來(lái)支持L3接口,。下圖是本嵌入式音頻系統(tǒng)的硬件電路連接圖,,見(jiàn)圖2。
各個(gè)引腳的連接說(shuō)明如下:
SYSCLK:IIS總線(xiàn)的基本時(shí)鐘源,,AT91RM9200處理器的TCLK3引腳與UDA1341TS芯片的系統(tǒng)時(shí)鐘相連接,。由于UDA1341TS芯片僅支持從模式,因此在所有的應(yīng)用中系統(tǒng)設(shè)備必須提供系統(tǒng)時(shí)鐘,。系統(tǒng)時(shí)鐘頻率是可編程的,,其分頻率可以是256、384或512倍的采樣頻率,。系統(tǒng)時(shí)鐘必須在頻率上與數(shù)字接口信號(hào)一致,。在設(shè)計(jì)中筆者用的是256fs的時(shí)鐘。
WS:字段選擇引腳,,用于指出現(xiàn)行串行數(shù)據(jù)采樣值為左聲道還是右聲道數(shù)據(jù),,AT91RM9200處理器的TK0引腳與WS相連接。
BCK:向UDA1341TS提供用作采樣邏輯的串行聲音位速率時(shí)鐘,,AT91RM9200處理器的TD0引腳與UDA1341TS芯片的BCK引腳相連接,。
DATAI,,DATAO:用于從UDA1341TS接收、發(fā)送串行聲音數(shù)據(jù),,AT91RM9200處理器的RD0,,RK0引腳分別對(duì)應(yīng)UDA1341TS的音頻輸入、輸出引腳,。
L3M0DE,,L3CLOCK,L3DATA:UDA1341TS的L3接口引腳,,分別與AT91RM9200的3個(gè)通用數(shù)據(jù)輸出引腳PA0,、PA1、PA2連接,。
5系統(tǒng)軟件設(shè)計(jì)方案
嵌入式Linux是一種完全開(kāi)放且免費(fèi)的操作系統(tǒng),,其支持多種硬件體系結(jié)構(gòu),運(yùn)行穩(wěn)定,,擁有完善的開(kāi)發(fā)工具,,為開(kāi)發(fā)人員提供了優(yōu)良的開(kāi)發(fā)環(huán)境[5]。在嵌入式Linux系統(tǒng)中,,設(shè)備驅(qū)動(dòng)程序提供了應(yīng)用程序和實(shí)際設(shè)備之間的一個(gè)軟件層(接口),,為應(yīng)用程序屏蔽了硬件細(xì)節(jié)。本設(shè)計(jì)中,,音頻設(shè)備驅(qū)動(dòng)程序主要通過(guò)對(duì)硬件的控制實(shí)現(xiàn)音頻流的傳輸,,同時(shí)向上層提供標(biāo)準(zhǔn)的音頻接口。整個(gè)音頻驅(qū)動(dòng)程序包括設(shè)備初始化,、打開(kāi)設(shè)備,、數(shù)字音頻處理(DSP)驅(qū)動(dòng)、混頻器(MIXER)驅(qū)動(dòng)和釋放設(shè)備等部分,。本文由于篇幅的限制,,僅介紹設(shè)備初始化及打開(kāi)設(shè)備的實(shí)現(xiàn)。
設(shè)備初始化是整個(gè)音頻驅(qū)動(dòng)程序的開(kāi)始部分,,主要完成對(duì)UDA1341TS音量,、采樣頻率、L3接口等的初始化,,并且注冊(cè)設(shè)備,。通過(guò)函數(shù)audio_init(void)完成以下具體功能:AT91RM9200控制端口(PA0、PA1,、PA2)的初始化;為UDA1341TS分配DMA通道;初始化UDA1341TS芯片;注冊(cè)音頻audio設(shè)備和混頻器設(shè)備,。
以下給出的是該函數(shù)總體框架:
audio_init(void)
{
Set_gpio_ctrl(GPIO_L3CLOCK);/*CPU控制端口的初始化*/
……/*“……”表示省略部分代碼,以下同*/
Input_stream.dma_ch=DMA_CH1;/*輸入DMA通道的選擇*/
Output_stream.dma_ch=DMA_CH2;/*輸出DMA通道的選擇*/
Local_irq_restore(flags);
Init_UDA1341();/*初始化UDA1341*/
……
/*下面兩個(gè)函數(shù)用來(lái)注冊(cè)音頻audio設(shè)備和混頻器設(shè)備*/
Audio_dev_dsp=register_sound_dsp(&at91rm9200_audio_fops,,-1);
Audio_dev_mixer=register_ound_mixer(&at91rm9200_mixer_fops,,-1);
}
打開(kāi)設(shè)備由函數(shù)open()來(lái)實(shí)現(xiàn),,該函數(shù)可以完成以下功能:配置IIS總線(xiàn)接口;設(shè)置UDA1341TS聲道及采樣頻率等參數(shù);計(jì)算緩沖區(qū)大小;為UDA1341TS分配DMA緩沖區(qū)。
該音頻模塊經(jīng)過(guò)正確的配置可以實(shí)現(xiàn)錄音,、放音及循環(huán)放音等功能,。本文給出初始化IIS接口、測(cè)試IIS接口以及運(yùn)用IIS接口來(lái)播放一段音樂(lè)的程序設(shè)計(jì)基本流程,,流程圖如圖3所示,。錄音和循環(huán)播放功能的設(shè)計(jì)流程與放音類(lèi)似,這里不再贅述,。
圖3IIS接口功能測(cè)試軟件設(shè)計(jì)流程圖
6結(jié)論
本文介紹了一種基于IIS總線(xiàn)的嵌入式音頻系統(tǒng),,該系統(tǒng)簡(jiǎn)潔實(shí)用,可以實(shí)現(xiàn)音頻的采集和播放,,文章具體講述了基于ATMEL公司AT91RM9200型微處理器與音頻編解碼芯片UDA1341TS的硬件連接及嵌入式Linux下音頻驅(qū)動(dòng)的實(shí)現(xiàn),。當(dāng)然,這只是本系統(tǒng)的主要組成部分,,至于其他相關(guān)組成部分如FLASH和SDRAM等,筆者在實(shí)際設(shè)計(jì)中已經(jīng)完成,,由于篇幅關(guān)系,,文中沒(méi)有詳細(xì)介紹。該系統(tǒng)已經(jīng)在AT91RM9200的開(kāi)發(fā)平臺(tái)上得到了實(shí)現(xiàn),,可以順利進(jìn)行音頻的采集和播放,,并取得了良好的效果。另外,,當(dāng)今實(shí)時(shí)視頻處理和傳輸技術(shù)發(fā)展迅速,,應(yīng)用也日益廣泛,如視頻會(huì)議,、VOIP電話(huà)等等,,本設(shè)計(jì)適當(dāng)加以擴(kuò)展,特別是與視頻模塊結(jié)合,,即可應(yīng)用于更多相關(guān)的復(fù)雜系統(tǒng)中,。