摘要:2.4語音中斷服務(wù)例程嵌入式處理EP7211本身提供的外設(shè)語音錄放Codec(coder/decoder)芯片可以實(shí)現(xiàn)語音的錄入和播放功能。該模塊提供2個(gè)獨(dú)立的16字節(jié)長(zhǎng)的數(shù)據(jù)發(fā)送和接緩沖區(qū)(FIFO),其為全雙工模式,數(shù)字據(jù)點(diǎn)發(fā)速率是64kbps。芯片自身提供工作時(shí)鐘、定時(shí)脈沖以及數(shù)據(jù)串/并和并/串轉(zhuǎn)換功能。編程人員通過設(shè)置EP7211相應(yīng)的控制寄存
2.4 語音中斷服務(wù)例程
嵌入式處理EP7211本身提供的外設(shè)語音錄放Codec(coder/decoder)芯片可以實(shí)現(xiàn)語音的錄入和播放功能。該模塊提供2個(gè)獨(dú)立的16字節(jié)長(zhǎng)的數(shù)據(jù)發(fā)送和接緩沖區(qū)(FIFO),其為全雙工模式,數(shù)字據(jù)點(diǎn)發(fā)速率是64kbps。芯片自身提供工作時(shí)鐘、定時(shí)脈沖以及數(shù)據(jù)串/并和并/串轉(zhuǎn)換功能。編程人員通過設(shè)置EP7211相應(yīng)的控制寄存器使能這些項(xiàng)功能,則每當(dāng)數(shù)據(jù)收發(fā)緩沖區(qū)半慢或者半空時(shí)(8字節(jié)),芯片自身就會(huì)產(chǎn)生一次中斷信號(hào)供外部處理。理論計(jì)算芯片中斷速率是1ms/次。
語音播放中斷服務(wù)例程主要完成的工作是,當(dāng)產(chǎn)生語音中斷時(shí),仍然有數(shù)據(jù)需要播放,則向語音數(shù)據(jù)發(fā)送緩沖區(qū)FIFO中寫入指定數(shù)據(jù),剩下的工作由Codec芯片本身來完成。中斷服務(wù)例程ISR的偽代碼如下(因?yàn)榫唧w實(shí)現(xiàn)代碼沒有通用性,故此處用偽碼描述):
void IRQ_Codec_Handler(void)
{
while(檢測(cè)系統(tǒng)狀態(tài)寄存器,發(fā)現(xiàn)語音芯片數(shù)據(jù)發(fā)送緩沖區(qū)FIFO非滿)
{
if(已經(jīng)播放過的語音數(shù)據(jù)長(zhǎng)度<給定的需要播放的語音數(shù)據(jù)長(zhǎng)度)
{
向語音芯片發(fā)送數(shù)據(jù)緩沖區(qū)FIFO寫入指定數(shù)據(jù);
調(diào)整已經(jīng)播放過的語音數(shù)據(jù)長(zhǎng)度;
if(已經(jīng)播放過的語音數(shù)據(jù)長(zhǎng)度>=給定的需要播放的語音數(shù)據(jù)長(zhǎng)度)//結(jié)束
{
禁止數(shù)據(jù)發(fā)送緩沖區(qū)中斷;
復(fù)位各相關(guān)的全局變量;
程序返回;
}
}
else
{
向語音芯片發(fā)送數(shù)據(jù)緩沖區(qū)FIFO寫入默認(rèn)數(shù)據(jù)
0XFF;
}
}
}
3 試驗(yàn)結(jié)構(gòu)和分析
由于在設(shè)計(jì)階段充分考慮過語音合成算法的大運(yùn)算量和系統(tǒng)的實(shí)時(shí)性要求,故我們?cè)诰唧w實(shí)現(xiàn)的時(shí)候也采取了一些措施,比較突出的有:用ARM匯編語言來實(shí)現(xiàn)關(guān)鍵性的函數(shù)代碼;語音合成時(shí)提高處理器EP7211的工作頻率(處理器正常工作頻率是18MHz);對(duì)于一些常用的三角函數(shù)計(jì)算,采用查表的方式等來加快程序執(zhí)行速度。在PDA樣機(jī)測(cè)試中,單字符合成時(shí)間在650ms左右,基本上能夠滿足實(shí)際應(yīng)用需求。數(shù)據(jù)語音庫經(jīng)過處理之后,占用了729560字節(jié)也能夠滿足本PDA系統(tǒng)的存儲(chǔ)的要求。
通信工程師備考資料免費(fèi)領(lǐng)取
去領(lǐng)取
共收錄117.93萬道題
已有25.02萬小伙伴參與做題