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