摘 要: LPC4357是NXP推出的基于ARM Cotex-M4核心的MCU,介紹了基于該MCU的低成本、低復(fù)雜度數(shù)字對(duì)講機(jī)方案,,詳細(xì)闡述了一種軟件設(shè)計(jì)方法,,并針對(duì)實(shí)現(xiàn)中的問(wèn)題與難點(diǎn)做了說(shuō)明。
關(guān)鍵詞: LPC4357,;Cotex-M4,;UDA1380;數(shù)字對(duì)講機(jī)
在通信設(shè)備全面數(shù)字化的今天,,對(duì)講機(jī)是少數(shù)還沒(méi)有被數(shù)字化的設(shè)備之一,。數(shù)字對(duì)講機(jī)與傳統(tǒng)模擬對(duì)講機(jī)相比,其頻譜利用率更高,,通信質(zhì)量更好,,安全性更有保證,業(yè)務(wù)也更廣泛,。這些特點(diǎn)對(duì)應(yīng)對(duì)緊張的頻譜資源狀況有重要意義,,同時(shí)給數(shù)字對(duì)講機(jī)的應(yīng)用帶來(lái)更大的市場(chǎng)空間。2009年,,工信部頒發(fā)了666號(hào)文件[1],,文件規(guī)定2010年不再批發(fā)25 kHz帶寬對(duì)講機(jī)的型號(hào)核準(zhǔn),2011年停止模擬對(duì)講機(jī)的型號(hào)核準(zhǔn),,2016年中國(guó)市場(chǎng)禁止使用模擬對(duì)講機(jī),,專網(wǎng)無(wú)線通信將全面進(jìn)入數(shù)字時(shí)代。
從目前的市場(chǎng)形勢(shì)來(lái)分析,,除了國(guó)家政策的支持外,,推動(dòng)數(shù)字化進(jìn)程的關(guān)鍵因素是降低數(shù)字終端的價(jià)格。一個(gè)低復(fù)雜度,、低成本的數(shù)字對(duì)講機(jī)方案對(duì)設(shè)備生產(chǎn)商和使用者都有積極意義,。本文提出了一種基于單片通用處理器的dPMR數(shù)字對(duì)講機(jī)解決方案,該方案通用性強(qiáng),,成本低,,非常適合設(shè)備廠商二次開(kāi)發(fā)和擴(kuò)展。
1 芯片選擇
本文提出的方案中,,語(yǔ)音CODEC選用飛利浦公司的UDA1380[2],,該芯片片內(nèi)集成兩組ADC和DAC,支持雙聲道全雙工通信,。聲碼器由用戶根據(jù)需要進(jìn)行選擇,,可以使用ASIC硬件實(shí)現(xiàn),也可使用軟件實(shí)現(xiàn),。MCU選用NXP公司的LPC4357,。LPC43xx系列芯片基于ARM公司推出的Cortex-M4核心,,另有Cortex-M0作為協(xié)處理器[3],同時(shí)Cortex-M4支持?jǐn)U展的數(shù)字信號(hào)處理加速指令,,如SIMD指令,、MAC指令、飽和運(yùn)算指令等[4],,這使得MCU不僅可以用于控制,,還可以用于小規(guī)模數(shù)字信號(hào)處理。
UDA1380的ADC支持8 kHz~55 kHz的采樣率,,DAC支持8 kHz~100 kHz的采樣率,,由于調(diào)頻數(shù)字對(duì)講機(jī)對(duì)話音質(zhì)量的要求并不高,滿足正常,、清晰的通話即可,,因此不需要立體聲采樣,只需用一路A/D和D/A,,另一路A/D和D/A可以當(dāng)做通用ADC和DAC,。總體上來(lái)看,, UDA1380在數(shù)據(jù)輸入/輸出方面支持模擬,、數(shù)字間的各種組合,,這種特性給應(yīng)用者帶來(lái)了很大的靈活性,; 閑置A/D和D/A增加了系統(tǒng)可擴(kuò)展性,并進(jìn)一步降低硬件復(fù)雜度和成本,。芯片內(nèi)部結(jié)構(gòu)如圖1所示,。
MCU需要完成系統(tǒng)的控制工作和聲碼器、數(shù)字濾波等數(shù)字信號(hào)處理任務(wù),。為了充分發(fā)揮芯片的性能,,瑣碎的控制工作可以交給Cortex-M0處理,Cortex-M4完成數(shù)字信號(hào)處理算法,。綜合考慮代碼量,、內(nèi)存開(kāi)銷、運(yùn)算速度以及擴(kuò)展需求,,選用NXP的LPC4357作為MCU,。LPC4357最高主頻可達(dá)204 MHz;片內(nèi)有兩組512 KB的Flash,,總共136 KB的SRAM,,16 KB的EEPROM;豐富的片內(nèi)外設(shè)和接口可以滿足各種擴(kuò)展需求,。經(jīng)過(guò)前期的方案驗(yàn)證,,該芯片完全可以滿足目前的需求,,而且還有足夠的可擴(kuò)展空間。
除上述主要芯片外,,系統(tǒng)還需要一個(gè)射頻前端,。為了突出系統(tǒng)的可擴(kuò)展性,本文并不對(duì)射頻前端做具體規(guī)定,,按照前述硬件選擇,,射頻前端可以根據(jù)需要靈活選擇支持4FSK的專用芯片或者成本更低廉的FM模塊。
2 系統(tǒng)總體方案
系統(tǒng)框圖如圖2所示,。MCU與UDA1380通過(guò)I2S和I2C接口連接,,其中I2S用于語(yǔ)音數(shù)據(jù)傳輸,I2C用于控制字傳輸,。
圖2中,,根據(jù)不同的射頻前端選擇,可以有兩種具體的方案: (1)如果射頻芯片選用帶有4FSK調(diào)制解調(diào)功能的收發(fā)器芯片,,可以采用圖2(a)所示方案,。MCU讀取被UDA1380數(shù)字化的語(yǔ)音信號(hào),經(jīng)過(guò)聲碼器壓縮,、協(xié)議棧打包等操作后,,可以直接按照2.4 kHz的符號(hào)率將數(shù)據(jù)發(fā)送至射頻收發(fā)芯片進(jìn)行調(diào)制并發(fā)射。接收的過(guò)程是發(fā)射的逆過(guò)程,。(2)如果需要進(jìn)一步降低成本,,射頻前端可以選用更簡(jiǎn)單的FM收發(fā)器,在MCU內(nèi)使用軟件實(shí)現(xiàn)基帶調(diào)制解調(diào)(如圖2(b)),。這樣MCU從UDA1380讀取數(shù)據(jù)后,,除了(1)中所述的處理外,還要做4FSK調(diào)制,,然后再通過(guò)I2S接口發(fā)送回UDA1380,,使用UDA1380的另一路D/A將數(shù)據(jù)轉(zhuǎn)變?yōu)槟M信號(hào)再做模擬FM調(diào)制并發(fā)射。接收過(guò)程同樣是發(fā)送的逆過(guò)程,。
3 軟件需求分析與設(shè)計(jì)
本方案中,,軟件需要完成的任務(wù)主要包括系統(tǒng)控制、數(shù)據(jù)通信,、協(xié)議棧和數(shù)字信號(hào)處理算法,。
3.1 系統(tǒng)控制
系統(tǒng)控制包括對(duì)音量調(diào)節(jié)、頻道選擇,、按鍵解析等操作,。系統(tǒng)啟動(dòng)后,完成必要的初始化和全局緩沖區(qū)內(nèi)存申請(qǐng)等工作后,,進(jìn)入主循環(huán),。主循環(huán)中需要處理的每項(xiàng)工作可以看做一個(gè)任務(wù),,每個(gè)任務(wù)都各自的觸發(fā)條件。軟件順序地執(zhí)行每個(gè)任務(wù),,沒(méi)有一定的優(yōu)先級(jí),,但是某些任務(wù)的返回值可能會(huì)影響其他任務(wù)的執(zhí)行狀態(tài),所以整個(gè)主循環(huán)也是一個(gè)狀態(tài)機(jī),。主循環(huán)內(nèi)的宏觀流程圖如圖3所示,。
為了提升方案的功耗表現(xiàn),增加了節(jié)能模式,,在正常發(fā)送或接收模式下,,也應(yīng)該根據(jù)需要盡可能讓不工作的模塊處于關(guān)閉狀態(tài),以進(jìn)一步延長(zhǎng)設(shè)備的工作時(shí)間,。經(jīng)測(cè)量,,加入電源管理后,功耗降低了,。
3.2 數(shù)據(jù)通信
3.2.1 語(yǔ)音數(shù)據(jù)采集與播放
本文使用的MELP聲碼器對(duì)20 ms語(yǔ)音幀進(jìn)行編碼,,UDA1380被配置為16 kHz的采樣率,16 bit量化,、立體聲采樣(右聲道傳輸其他數(shù)據(jù)),。所以在MCU內(nèi)一個(gè)20 ms語(yǔ)音幀所需緩沖區(qū)大小為1 280 B。為了保證數(shù)據(jù)的連續(xù)性,,使用兩片1 280 B大小的緩沖區(qū)進(jìn)行交替使用,。為了使收發(fā)獨(dú)立,互不干擾,,除了兩片發(fā)送緩沖區(qū),,還需要為接收也開(kāi)辟兩塊1 280 B的緩沖區(qū)。綜上所述,,MCU中用于語(yǔ)音數(shù)據(jù)的靜態(tài)緩沖區(qū)為5 KB,出于對(duì)RAM資源節(jié)省的考慮,,將這些靜態(tài)緩沖區(qū)通過(guò)分散加載[5]放置于片內(nèi)Flash中的固定位置,。聲碼器對(duì)一個(gè)語(yǔ)音幀的編解碼操作必須在接下來(lái)的20 ms內(nèi)完成,以保證整個(gè)系統(tǒng)的正常運(yùn)行。
由于語(yǔ)音數(shù)據(jù)量大,,為了在數(shù)據(jù)通信上不占用過(guò)多資源,,MCU中I2S接口數(shù)據(jù)的收發(fā)使用DMA來(lái)控制,如圖4所示。采集時(shí),,UDA1380將數(shù)據(jù)傳輸?shù)組CU中I2S模塊的緩沖隊(duì)列中,,當(dāng)緩沖隊(duì)列的數(shù)據(jù)深度達(dá)到預(yù)設(shè)的DMA觸發(fā)深度時(shí),DMA控制器將I2S緩沖隊(duì)列中的數(shù)據(jù)搬移至Flash中的數(shù)據(jù)緩沖區(qū),,等待后續(xù)的聲碼器壓縮處理,;播放時(shí),,聲碼器解碼數(shù)據(jù)后存放在Flash中的數(shù)據(jù)緩沖區(qū)中,此時(shí)DMA控制器被啟動(dòng),,從Flash數(shù)據(jù)緩沖區(qū)搬移數(shù)據(jù)到I2S模塊的發(fā)送緩沖隊(duì)列中,,隊(duì)列中的數(shù)據(jù)會(huì)連續(xù)發(fā)送至UDA1380進(jìn)行播放。
3.2.2 同步
系統(tǒng)工作時(shí),,MCU中對(duì)數(shù)據(jù)的處理一定要與已接收或者待發(fā)送的有效數(shù)據(jù)保持一定的同步關(guān)系,,這種同步通過(guò)DMA控制器的中斷來(lái)實(shí)現(xiàn)。設(shè)置DMA使其每搬移1 280 B中斷一次,,即每20 ms中斷一次,。雙緩沖區(qū)方案不是唯一的,也可以使用一個(gè)較大的隊(duì)列來(lái)替代,??紤]到此處時(shí)間控制十分嚴(yán)格且數(shù)據(jù)量一定,所以選用雙緩沖區(qū)交替使用的方法不但節(jié)省內(nèi)存,,軟件實(shí)現(xiàn)也十分簡(jiǎn)單,,在對(duì)應(yīng)的中斷處理函數(shù)中只需切換數(shù)據(jù)緩沖區(qū)索引并重啟DMA即可達(dá)到同步的目的。
另一個(gè)對(duì)定時(shí)要求十分嚴(yán)格的地方就是MCU與射頻前端的通信部分,。只有此處嚴(yán)格定時(shí),,才能保證空中數(shù)據(jù)的連續(xù)與正確。由于本文給出的方案偏向于通用方案,,所以該處的定時(shí)針對(duì)不同射頻前端推薦幾種處理方式:(1)如果射頻收發(fā)器選用支持4FSK的專用芯片,,可以從接口和中斷的角度考慮解決方案。常用于此處的接口有SPI,、McBSP等,,這種同步接口通過(guò)嚴(yán)格的控制時(shí)鐘可以達(dá)到準(zhǔn)確定時(shí)的目的。此外,,專用芯片通常會(huì)將收發(fā)結(jié)束的信號(hào)引出到管腳,,用戶可用此信號(hào)觸發(fā)MCU的外部中斷,使用異步方式通信,。(2)如果通過(guò)MCU軟件完成4FSK基帶調(diào)制解調(diào),,可以使用定時(shí)器中斷滿足定時(shí)需求,或者使用DMA搬移定量數(shù)據(jù)并中斷,,既可以節(jié)省MCU資源,,又可以達(dá)到定時(shí)目的。
3.3 數(shù)字信號(hào)處理算法
方案中的信號(hào)處理算法主要指數(shù)字濾波,、聲碼器和基帶調(diào)制解調(diào),。這部分軟件占用MCU資源最多,其中聲碼器是對(duì)系統(tǒng)性能影響最大的模塊,。
實(shí)現(xiàn)上述數(shù)字信號(hào)處理算法的方法是使用匯編或者編譯器支持的固有函數(shù),,也可以使用廠商提供的DSP庫(kù)[6],。為了避免過(guò)多地依賴編譯器又能充分發(fā)揮Cortex-M4的性能,選擇C內(nèi)嵌匯編的方式實(shí)現(xiàn),。實(shí)驗(yàn)表明,,采用ADF7021為射頻前端,在未使用M0做輔助操作時(shí),,LPC4357完成一個(gè)20 ms語(yǔ)音幀的編解碼操作需要10 ms左右的時(shí)間,,該延遲不會(huì)影響系統(tǒng)正常運(yùn)行。
3.4 需要注意的問(wèn)題
實(shí)現(xiàn)過(guò)程中需要注意:(1)由于目前沒(méi)有使用操作系統(tǒng),,因此軟件設(shè)計(jì)時(shí)要使用非阻塞操作,,除了滿足實(shí)時(shí)響應(yīng)的需求,也避免了不必要的系統(tǒng)癱瘓;(2)該方案的靈活性是建立在簡(jiǎn)化硬件,、充分利用軟件實(shí)現(xiàn)各種功能的基礎(chǔ)上,,軟件設(shè)計(jì)時(shí)要盡可能地模塊化、部件化,,以方便功能擴(kuò)展和二次開(kāi)發(fā),。
本文設(shè)計(jì)的方案已經(jīng)應(yīng)用于樣機(jī)設(shè)計(jì)并投入小批量試產(chǎn),在成本,、話音質(zhì)量,、功耗等方面有顯著的優(yōu)勢(shì);而且由于在設(shè)計(jì)之初充分考慮了二次開(kāi)發(fā)問(wèn)題,所以該方案有著良好的可擴(kuò)展性,,應(yīng)用前景十分廣闊,。
參考文獻(xiàn)
[1] 工業(yè)和信息化部.工業(yè)和信息化部關(guān)于150 MHz 400 MHz頻段專用對(duì)講機(jī)頻率規(guī)劃和使用管理有關(guān)事宜的通知[S].2009-12-12.
[2] Philips Semiconductors. UDA1380, stereo audio coder-decoder for MD, CD and MP3[Z]. 2004.
[3] NXP Semiconductors. LPC43xx user manual Rev. 1.1[Z]. 2012.
[4] ARM. Cortex-M4 devices generic user guide[Z]. 2010.
[5] ARM. RealView編譯工具4.0-鏈接器用戶指南[Z].2008.
[6] IAR Systems. Designing advanced DSP applications on the Kinetis ARM Cortex-M4 MCU-Part 1[Z]. 2011.