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