LPC1700系列為恩智浦半導體以第2代ARM Cortex-M3核心為基礎的微控制器,特別針對高性能低功耗的嵌入式系統應用,其支持最高120MHz時(shí)脈速度,最高512K位元FLASH以及64K位元SRAM.其集成豐富的外圍設備接口:以太網(wǎng)MAC、USB 2.0 Host/OTG/Device、CAN 2.0B、12位元ADC、10位元DAC、SPI/SSP、I2S、DMA等等。

Fig1.系統模塊圖
Helix MP3軟件解碼庫可解碼兼容于MPEG格式的MP3,并同時(shí)達成浮點(diǎn)和定點(diǎn)。其中定點(diǎn)特別針對32位元定點(diǎn)處理器達成最佳化。
本文介紹該方案的軟硬件設計,完整的軟件代碼可至恩智浦半導體官網(wǎng)下載http://ics.nxp.com/support/documents/microcontrollers/
二 系統概述
1.介紹
為快速搭建硬件平臺進(jìn)行系統設計與測試,本方案使用現有的電路板:KEIL MCB1700評估板和ZLG的UDA1380音訊板。圖1展示本方案系統模塊圖。圖2展示系統實(shí)體照片。
MP3檔儲存于SD/MMC卡和USB快閃存儲器中。SD/MMC卡插于MCB1700評估板上的Micro SD卡插槽,該插槽連接至LPC1700的SPI/SSP接口。USB快閃存儲器如USB優(yōu)盤(pán),插于MCB1700板子上的USB主機埠。
解碼后的框架信息透過(guò)I2S接口導入UDA1380,將音箱或耳機音源線(xiàn)插于音訊子板的對應座上即可聽(tīng)音樂(lè )。
透過(guò)2種方法可調節音量:調節音箱與耳機音量,或調節M(mǎn)CB1700電路板上的電位計。全套系統由單一USB電纜供電(+5V)。
2.特性
本系統具備以下特性:
●支持MPEG1/2/2.5 Layer 3 MP3.●支持固定位元率、變化位元率以及自由位元率模式。
●支持播放SDC/SDHC/MMC卡中的MP3并支持FAT12/16/32與長(cháng)檔名。
●支持播放USB快閃存儲器中的MP3并支持FAT16.●全套方案使用40k位元ROM,50k位元RAM(其中40k位元用于MP3解碼)。
三 硬件設計
1.概述
MCB1700評估板和UDA1380音訊板之間的線(xiàn)路連接如圖3所示。
2.關(guān)于MCB1700評估板
KEIL公司的MCB1700評估板主要用于評估恩智浦LPC1700系列芯片。圖4展示該電路板及電路板上的模塊。
提醒:
1.跳線(xiàn)D+和D-必須置于「HOST」。
2.跳線(xiàn)AD0.2必須置于「ON」。
更多關(guān)于MCB1700評估板的詳細信息請參閱:http://www.keil.com/mcb1700/評估板原理圖請參閱:http://www.keil.com/mcb1700/mcb1700-schematics.pdf
3.關(guān)于UDA1380音訊板
UDA1380音訊板為ZLG Smart Cortex-M3-1700開(kāi)發(fā)套件中的子板。UDA1380芯片為立體音訊轉碼器,可廣泛應用于MD、CD、MP3等播放器。其支持I2S資料框架格式,集成24位元ADC和DAC,ADC支持8-55kHz取樣頻率,DAC支持8-100kHz取樣頻率,支持3線(xiàn)(L3)以及I2C接口控制。圖5展示UDA1380音訊板原理圖。
四 軟件設計
1.軟件方塊圖
圖6為本方案軟件模塊方塊圖。
下面分別介紹此軟件模塊。
1.1主程序模塊
主程序模塊負責全套系統管理與調度主要負責:
●系統初始化。
●于SD/MMC卡和USB快閃存儲器中讀取MP3文件。
●調用MP3解碼庫解碼。
●播放解碼后框架數據。
●狀態(tài)顯示與信息打印。
1.2 Helix MP3解碼器
Helix MP3解碼器可解碼與MPEG兼容的MP3,并可達成浮點(diǎn)和定點(diǎn),其中定點(diǎn)特別針對ARM處理器達成最佳化,可在任何支持長(cháng)乘法運算以及長(cháng)乘法與加法運算的32位元定點(diǎn)處理器上運行。
詳細信息請參閱:https://datatype.helixcommunity.org/Mp3dec
1.3 USBHostLite協(xié)定堆疊
USBHostLite為簡(jiǎn)化版的USB Host協(xié)定堆疊,可用于連接USB主機埠上的USB大量?jì)Υ嬖O備。其具備以下限制:
●僅支持控制和批量傳輸。
●僅支持大量?jì)Υ嬖O備。
●僅支持FAT16檔案系統格式。
●不支持長(cháng)檔名。
●僅能連接位于根目錄底下的檔案。
詳細信息請參閱:http://ics.nxp.com/support/software/usb.host.msc/
1.4 SD/MMC卡檔案系統
此方案于SD/MMC卡上使用FatFs檔案系統。FatFs被廣泛應用于小型嵌入式系統中的FAT檔案系統。具備支持FAT12/16/32、長(cháng)檔名、多項物理驅動(dòng)器與分區等特點(diǎn)。
詳細信息請參閱:http://elm-chan.org/fsw/ff/00index_e.html
提醒:FAT檔案系統中長(cháng)檔名(Long File Name;LFN)為微軟專(zhuān)利,用于商業(yè)用途須取得微軟授權。
1.5 UDA1380驅動(dòng)器
UDA1380驅動(dòng)器提供API函數用于配置與控制UDA1380芯片,使該芯片可接收自L(fǎng)PC1700發(fā)送的音訊資料流程。其中主要的2個(gè)API函數分別用于初始化及音量控制。
2.軟件的達成
圖7展示基本軟件流程圖。
主程序首先進(jìn)行初始化,包含I2S、UDA1380、UART以及USBHostLite與FatFs檔案系統。下一步為讀取USB快閃存儲器根目錄中的指定MP3檔案,并自動(dòng)查找SD/MMC卡中根目錄下的MP3檔,最后按順序依序播放。
提醒:本方案采用的USBHostLite僅提供基本檔案讀寫(xiě)功能,并不支持查找功能,因此將已給予特定名稱(chēng)的MP3(如usb_01.mp3)放于USB快閃存儲器根目錄之下,播放時(shí)可跳過(guò)查找直接播放此類(lèi)MP3.
2.1音訊緩沖區(Audio Buffer)
音訊緩沖區為一長(cháng)度4608位元的陣列,可存放1個(gè)完整解碼后的輸出框架。解碼時(shí),1個(gè)音訊緩沖區可放置1個(gè)輸出框架。播放時(shí),DMA控制I2S將此音訊緩沖區的資料發(fā)送至UDA1380.
2.2解碼流程
圖8為解碼流程圖。
MP3檔首先被加載至讀取緩沖區(Read Buffer)中,后續解碼即是針對此讀取緩沖區資料進(jìn)行解碼。一般而言,可將其設置稍大,以減少檔案讀取次數。但讀取大容量檔案內容需較長(cháng)時(shí)間,可能因此導致無(wú)法連續播放。在實(shí)際應用中,需根據檔案讀取速度、解碼速度、播放速度和可用RAM空間選擇合適的讀取緩沖區尺寸。
2.3播放流程
圖9為播放流程圖。
主程序啟動(dòng)DMA傳送第1個(gè)框架資料后,傳送過(guò)程即開(kāi)始,傳送完成后即中斷DMA.于DMA中斷服務(wù)程序時(shí),繼續發(fā)送下一個(gè)音訊緩沖區資料。此流程以下列假設為基礎:在音訊緩沖區資料完成發(fā)送前,另一新框架已解碼并放置于下一個(gè)音訊緩沖區中。
2.4設計考量
本系統具備2項重要設計考量:
●如何使解碼與播放流程保持同步?
●如何確保播放流暢?
針對第一個(gè)問(wèn)題,我們導入全域變量:音訊緩沖區陣列(包含2到3個(gè)音訊緩沖區)。其中一個(gè)音訊緩沖區用于播放,另外一個(gè)或兩個(gè)用于解碼。若所有音訊緩沖區狀態(tài)皆標志為「滿(mǎn)」,解碼器則不會(huì )被啟動(dòng)。等到其中一個(gè)音訊緩沖區資料被播放其狀態(tài)標志位元為「空」,主程序即啟動(dòng)解碼器并將解碼后框架放置于「空」的音訊緩沖區里,并將標志位元設為「滿(mǎn)」。
針對第二個(gè)問(wèn)題,其設計考量多個(gè)因素:檔案讀取速度、解碼速度與播放速度等。
MP3播放一個(gè)框架的固定時(shí)間為26ms.本方案MCU在100MHz時(shí)脈速度下運行,使用Helix MP3解碼器的速度約為每框架10ms,此即表示僅有16ms時(shí)間供CPU處理所有其它任務(wù)。在剩余任務(wù)里,讀取MP3檔案內容并填充讀取緩沖區將占用較多時(shí)間,因此選擇合適的讀取緩沖區顯得更加重要。
本方案從USB快閃存儲器讀取4k位元檔案資料耗時(shí)約8ms.從SD/MMC卡里讀取8k位元耗時(shí)約2ms.因此從USB快閃存儲器讀取檔案時(shí),我們將讀取緩沖區長(cháng)度設為4k位元,雖然讀取SD/MMC卡可相當快速,但受限于可使用的RAM空間,我們將讀取緩沖區長(cháng)度設為8k位元,以確保播放流暢性。
五 測試結果
本方案分別采用2G/4G/8G Micro SD/SDHC卡與2G USB快閃存儲器進(jìn)行測試并取得良好播放效果。
此方案可播放大部分MP3檔案,但受限于解碼速度,播放320kbps的MP3會(huì )造成部分問(wèn)題。由于USBHostLite僅支持FAT16檔案系統,因此最高僅支持2G USB快閃存儲器。且USBHostLite不支持長(cháng)檔名,因此USB快閃存儲器中MP3名稱(chēng)只能為8.3格式。
圖10與圖11分別顯示播放過(guò)程中序列埠輸出信息。
六 結論
本文介紹以恩智浦LPC1700和Helix MP3軟件解碼庫為基礎的MP3播放器解決方案。此方案充分發(fā)揮LPC1700芯片的高性能與豐富外圍設備。
隨著(zhù)更多新產(chǎn)品發(fā)布,如具備外部存儲器匯流排的Cortex-M3 LPC1800系列,以及具備DSP功能的Cortex-M4 LPC4300系列,恩智浦半導體MCU將大幅擴展其在音訊處理應用上的領(lǐng)域。