運(yùn)用EP7211實(shí)現(xiàn)傳呼信息實(shí)時(shí)語(yǔ)音合成和播放方案設(shè)計(jì)
本文引用地址:http://www.ex-cimer.com/article/149879.htm
2.3 PDA系統(tǒng)的體系結(jié)構(gòu)
PDA系統(tǒng)中嵌入式處理器EP7211進(jìn)行數(shù)據(jù)處理,傳呼解碼芯接收傳呼信息并進(jìn)行解碼,LCD提供數(shù)據(jù)輸出顯示,觸摸屏提供用戶輸入接口,F(xiàn)lash用來(lái)存儲(chǔ)應(yīng)用程序和數(shù)據(jù),SRAM為程序運(yùn)行提供內(nèi)存空間,電源電路為嵌入式處理器和外圍設(shè)備提供所需要工作電壓。
嵌入式處理器EP7211是Cirrus Logic公司專(zhuān)門(mén)為低成本、超低功耗的嵌入式應(yīng)用設(shè)計(jì)的,包含ARM7TDMI處理器內(nèi)核和豐富的外圍接口。外圍接口有CODEC音頻接口、SPI串行A/D接口、單色LCD接口、DRAM接口、紅外接口、2個(gè)PWM接口、實(shí)時(shí)時(shí)鐘RTC以及電源檢測(cè)接口。EP7211的內(nèi)核電路工作在2.5V,而外圍電路工作在3.3V;可根據(jù)具體情況對(duì)內(nèi)核的時(shí)鐘進(jìn)行動(dòng)態(tài)編程控制,可工作在18、36、49和74MHz。另外EP7211還有3種基本供電模式:正常操作(operating)、空閑(idle)和等待(standby)。在等待模式,主時(shí)鐘被關(guān)斷,整個(gè)CPU及相關(guān)外圍(除中斷和RTC)也關(guān)斷,但可通過(guò)中斷或按鈕來(lái)喚醒。
系統(tǒng)軟件開(kāi)發(fā)平臺(tái)采用了我們自主開(kāi)發(fā)研制的、專(zhuān)門(mén)面向嵌入式應(yīng)用系統(tǒng)開(kāi)發(fā)的XGW平臺(tái)。XGW開(kāi)發(fā)平臺(tái)采用消息驅(qū)動(dòng)機(jī)制,是C語(yǔ)言開(kāi)發(fā)。它功能強(qiáng)大、模塊化設(shè)計(jì)、擴(kuò)展性強(qiáng)、產(chǎn)品升級(jí)容易,總體框架如圖5所示。
圖5全面反應(yīng)了XGW開(kāi)發(fā)平臺(tái)的體系結(jié)構(gòu),包括事件消息驅(qū)動(dòng)機(jī)制、內(nèi)存管理、字符和圖形顯示輸出、圖形組件庫(kù)等。圖形組件庫(kù)中的編輯框、列表框、按鈕等為用戶應(yīng)用程序開(kāi)發(fā)提供系統(tǒng)應(yīng)用編程接口API。不過(guò),XGW平臺(tái)對(duì)于系統(tǒng)硬件的中斷響應(yīng)沒(méi)有提供統(tǒng)一的入口和出口,需要開(kāi)發(fā)人員單獨(dú)處理。XGW開(kāi)發(fā)平臺(tái)的消息分為鼠標(biāo)消息、鍵盤(pán)消息和定時(shí)器消息等3類(lèi)。
2.4 語(yǔ)音中斷服務(wù)例程
嵌入式處理EP7211本身提供的外設(shè)語(yǔ)音錄放Codec(coder/decoder)芯片可以實(shí)現(xiàn)語(yǔ)音的錄入和播放功能。該模塊提供2個(gè)獨(dú)立的16字節(jié)長(zhǎng)的數(shù)據(jù)發(fā)送和接緩沖區(qū)(FIFO),其為全雙工模式,數(shù)字據(jù)點(diǎn)發(fā)速率是64kbps。芯片自身提供工作時(shí)鐘、定時(shí)脈沖以及數(shù)據(jù)串/并和并/串轉(zhuǎn)換功能。編程人員通過(guò)設(shè)置EP7211相應(yīng)的控制寄存器使能這些項(xiàng)功能,則每當(dāng)數(shù)據(jù)收發(fā)緩沖區(qū)半慢或者半空時(shí)(8字節(jié)),芯片自身就會(huì)產(chǎn)生一次中斷信號(hào)供外部處理。理論計(jì)算芯片中斷速率是1ms/次。
語(yǔ)音播放中斷服務(wù)例程主要完成的工作是,當(dāng)產(chǎn)生語(yǔ)音中斷時(shí),仍然有數(shù)據(jù)需要播放,則向語(yǔ)音數(shù)據(jù)發(fā)送緩沖區(qū)FIFO中寫(xiě)入指定數(shù)據(jù),剩下的工作由Codec芯片本身來(lái)完成。中斷服務(wù)例程ISR的偽代碼如下(因?yàn)榫唧w實(shí)現(xiàn)代碼沒(méi)有通用性,故此處用偽碼描述):
void IRQ_Codec_Handler(void)
{
while(檢測(cè)系統(tǒng)狀態(tài)寄存器,發(fā)現(xiàn)語(yǔ)音芯片數(shù)據(jù)發(fā)送緩沖區(qū)FIFO非滿)
{
if(已經(jīng)播放過(guò)的語(yǔ)音數(shù)據(jù)長(zhǎng)度給定的需要播放的語(yǔ)音數(shù)據(jù)長(zhǎng)度)
{
向語(yǔ)音芯片發(fā)送數(shù)據(jù)緩沖區(qū)FIFO寫(xiě)入指定數(shù)據(jù);
調(diào)整已經(jīng)播放過(guò)的語(yǔ)音數(shù)據(jù)長(zhǎng)度;
if(已經(jīng)播放過(guò)的語(yǔ)音數(shù)據(jù)長(zhǎng)度>=給定的需要播放的語(yǔ)音數(shù)據(jù)長(zhǎng)度)//結(jié)束
{
禁止數(shù)據(jù)發(fā)送緩沖區(qū)中斷;
復(fù)位各相關(guān)的全局變量;
程序返回;
}
}
else
{
向語(yǔ)音芯片發(fā)送數(shù)據(jù)緩沖區(qū)FIFO寫(xiě)入默認(rèn)數(shù)據(jù)
0XFF;
}
}
}
3 試驗(yàn)結(jié)構(gòu)和分析
由于在設(shè)計(jì)階段充分考慮過(guò)語(yǔ)音合成算法的大運(yùn)算量和系統(tǒng)的實(shí)時(shí)性要求,故我們?cè)诰唧w實(shí)現(xiàn)的時(shí)候也采取了一些措施,比較突出的有:用ARM匯編語(yǔ)言來(lái)實(shí)現(xiàn)關(guān)鍵性的函數(shù)代碼;語(yǔ)音合成時(shí)提高處理器EP7211的工作頻率(處理器正常工作頻率是18MHz);對(duì)于一些常用的三角函數(shù)計(jì)算,采用查表的方式等來(lái)加快程序執(zhí)行速度。在PDA樣機(jī)測(cè)試中,單字符合成時(shí)間在650ms左右,基本上能夠滿足實(shí)際應(yīng)用需求。數(shù)據(jù)語(yǔ)音庫(kù)經(jīng)過(guò)處理之后,占用了729 560字節(jié)也能夠滿足本PDA系統(tǒng)的存儲(chǔ)的要求。
當(dāng)PDA系統(tǒng)收到1條個(gè)人傳呼信息時(shí),在語(yǔ)音庫(kù)的支持下,立刻啟動(dòng)語(yǔ)音合成算法,逐個(gè)進(jìn)行字符語(yǔ)音合成。當(dāng)?shù)?個(gè)字節(jié)語(yǔ)音合成結(jié)束后,立刻啟動(dòng)語(yǔ)音中斷服務(wù)例程進(jìn)行語(yǔ)音播放。這樣收到的個(gè)人傳呼信息,前臺(tái)逐個(gè)字符解碼時(shí),其后臺(tái)語(yǔ)音播放也在進(jìn)行。根據(jù)實(shí)際測(cè)試參數(shù),基本上滿足了系統(tǒng)的實(shí)時(shí)性要求。
從一定角度看,單字符650 ms的語(yǔ)音合成時(shí)間基本能夠滿足實(shí)際應(yīng)用需要,但還是希望能夠進(jìn)一步減小這個(gè)值。這由于我們對(duì)ARM算是器的使用還處在研究階段。ARM本身提供了16位的Thumb指令集和32位的ARM指令集,而且兩者在某些方面表現(xiàn)出較大差別。一般來(lái)講,Thumb代碼長(zhǎng)度是ARM代碼長(zhǎng)度的65%,而執(zhí)行效率要經(jīng)后者高出60%。但在某些方面,32位ARM指令集也會(huì)表現(xiàn)出其優(yōu)于16位Thumb指令集的強(qiáng)大功能;同時(shí)該處理器系統(tǒng)支持ARM指令庥和Thumb指令集混合編程模式。隨著對(duì)二者差別和各自?xún)?yōu)勢(shì)的深入理解,結(jié)合本系統(tǒng)的硬件體系結(jié)構(gòu),采用有效的指令集混合編程模式將會(huì)使程序執(zhí)行效率進(jìn)一步提高,從而使實(shí)時(shí)性得到進(jìn)一步加強(qiáng)。
評(píng)論