摘要:MP3編碼標(biāo)準(zhǔn)壓縮率高,壓縮質(zhì)量好,是廣為應(yīng)用的音頻壓縮格式。文章介紹了一種基于ATmega16內(nèi)核的單片機(jī)MP3解碼原理,對(duì)系統(tǒng)的軟、硬件部件進(jìn)行了設(shè)計(jì),實(shí)現(xiàn)了實(shí)時(shí)解碼過程。
關(guān)鍵詞:VS1003;ATmega16;Keil8.08;音頻解碼
MP3 作為高質(zhì)量音樂壓縮標(biāo)準(zhǔn),給音頻產(chǎn)業(yè)帶來了具大的沖擊。MP3 技術(shù)使音樂數(shù)據(jù)壓縮比率大,回放質(zhì)量高。如 CD格式的音樂數(shù)據(jù)壓縮成MP3 格式,音效相差無己,但大小至少可壓縮12 倍。由于MP3 音樂的較小數(shù)據(jù)量和近乎完美的播放效果使其在網(wǎng)絡(luò)上傳輸?shù)靡詫?shí)現(xiàn)。隨著電子技術(shù)的發(fā)展,MP3播放器向大容量、高音質(zhì)、小巧
便攜不斷發(fā)展。本文將從軟硬件方面詳細(xì)介紹如何實(shí)現(xiàn)基于ATmega16單片機(jī)的MP3音頻解碼過程。
l 方案設(shè)計(jì)
本設(shè)計(jì)主要完成U盤的識(shí)別和數(shù)據(jù)的讀取,并將U盤中讀取的MP3文件解碼播放出流暢的音樂,完成MP3播放器的存儲(chǔ)與解碼的分離。系統(tǒng)功能主要包括:讀取U盤數(shù)據(jù)、MP3解碼播放。實(shí)現(xiàn)設(shè)計(jì)功能需要USB接口芯片、MP3解碼芯片、主控制器和其他外圍電路。

2硬件設(shè)計(jì)
MP3解碼芯片與MCU的連接
VSl003的所有數(shù)據(jù)和控制命令均通過SPI總線接口實(shí)現(xiàn),因此與ATmega16的接口實(shí)現(xiàn)比較簡(jiǎn)單,包括3條SPI數(shù)據(jù)線和4條控制線,如圖1所示。
VSl003通過同步串行總線SPI與ATmega64進(jìn)行命令和數(shù)據(jù)的傳輸。由于ATmega64內(nèi)部集成有SPI總線模塊,只要正確寫SPI相關(guān)寄存器就能輕松控制SPL,這種硬件SPI總線減小了軟件設(shè)計(jì)的困難。VSl003的SPI接口具有2種工作模式:新模式和兼容模式。設(shè)置寄存器SM_SDI。NEW為1使VSl003處于新模式,此時(shí)設(shè)置SMSDISFIARED為1,控制信號(hào)和數(shù)據(jù)信號(hào)的傳送將分別采用xCS和xDCS作為同步信號(hào)。系統(tǒng)啟動(dòng)后,由MCU控制將存儲(chǔ)于U盤中歌曲的碼流信息送入到VSl003芯片中,通過VSl003芯片解碼以及其內(nèi)含的高質(zhì)量的立體聲DAC和耳機(jī)驅(qū)動(dòng)電路,實(shí)現(xiàn)MP3歌曲的播放功能,在按鍵的控制下,實(shí)現(xiàn)對(duì)歌曲播放模式以及歌曲選擇等功能。
2.1 VS1003的3條SPI數(shù)據(jù)線
28腳-SCLK 串行總線的時(shí)鐘
29腳--SI串行輸入
30腳--SO 串行輸出
2.2 VS1003的4條控制線及ATEEGA16的4條控制線
03腳--XRESET 異步復(fù)位端,低電平有效 PB1/T1 T/C1 計(jì)數(shù)器源
13腳--XDCS/BSYNC1數(shù)據(jù)片選端,低電平有效 PB2模擬比較正輸入
23腳--XCS片選輸入,低電平有效PB3模擬比較負(fù)輸入
08腳--DREQ 數(shù)據(jù)請(qǐng)求,輸入總線PD0輸出
控制信號(hào)和數(shù)據(jù)信號(hào)的傳送分別采用xCS和xDCS作為同步信號(hào);RXD(端口 PD0)是USART的數(shù)據(jù)接收引腳。當(dāng)使能了USART的接收器后,這個(gè)引腳被強(qiáng)制設(shè)置為輸出,此時(shí) DDD0 不起作用。但是 PORTD0 仍然控制上拉電阻;DREQ 腳,在VS1003的FIFO 在能夠接受數(shù)據(jù)的時(shí)候輸出高電平。此時(shí),VS1003可獲取至少 32Byte的 SDI。數(shù)據(jù)或一個(gè)SCI命令。遵循這個(gè)標(biāo)準(zhǔn),當(dāng)DREQ 變低時(shí),發(fā)送器必須停止發(fā)送新的數(shù)據(jù)。 因?yàn)橛?2Byte 的保險(xiǎn)區(qū)域(數(shù)據(jù)緩沖區(qū)),當(dāng)檢測(cè)到DREQ 信號(hào)時(shí),發(fā)送器(MCU)須發(fā)送32Byte的 SDI數(shù)據(jù)。

3軟件設(shè)計(jì)
3.1軟件架構(gòu)分析
因?yàn)橐骖櫟礁哔|(zhì)量的音視頻效果、多種外設(shè)和有限的系統(tǒng)資源,PMP軟件系統(tǒng)的設(shè)計(jì)變得相對(duì)復(fù)雜。系統(tǒng)設(shè)計(jì)將軟件分為三層架構(gòu),如圖2所示。第1層是操作系統(tǒng)層,其中包括bootloader引導(dǎo)程序,主要完成系統(tǒng)從FLASH的啟動(dòng),LOGO的顯示,以及OS的引導(dǎo)。主要包括適合在TI DM320上運(yùn)行的嵌入式操作系統(tǒng),以及各種外圍設(shè)備的驅(qū)動(dòng)程序。第2層為CODEC和MMI核層,MMI核包括第3層主GUI和各種應(yīng)用程序所依賴的各種框架結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu),如窗口管理,定時(shí)器管理等。CODEC部分包括音頻的編/解碼程序(主要由ARM實(shí)現(xiàn))和圖像的編/解碼程序(主要由DSP實(shí)現(xiàn))。第3層為主GUI和各種應(yīng)用程序。應(yīng)用程序包括:FileManager(用來瀏覽存儲(chǔ)器中的文件),VideoPlayer(播放視頻文件),AudioPlayer(播放音頻文件),ImageViewer(瀏覽圖片),F(xiàn)M(收音機(jī)),Games(游戲),Resumes(重新播放音/視頻文件)。
3.2讀取U盤數(shù)據(jù)
單片機(jī)讀寫U盤的程序可分成2大部分:應(yīng)用程序和固件程序。應(yīng)用程序完成系統(tǒng)的數(shù)據(jù)處理任務(wù)、外圍控制等功能;固件程序處理底層的USB通訊協(xié)議、文件系統(tǒng),數(shù)據(jù)在USB總線上的可靠傳輸和在U盤上的存取操作。CH375內(nèi)置了處理海量存儲(chǔ)設(shè)備的專用通信協(xié)議的固件,所以嵌入式系統(tǒng)的單片機(jī)可以通過CH375將U盤作為可移動(dòng)的大容量存儲(chǔ)器。數(shù)據(jù)讀寫只需要幾條指令,而不需要詳細(xì)了解USB通信協(xié)議。
U盤文件的讀寫方式采取扇區(qū)模式以扇區(qū)(每個(gè)扇區(qū)通常是512字節(jié))為基本單位進(jìn)行讀寫操作,從而將USB存儲(chǔ)設(shè)備簡(jiǎn)化為一種外部數(shù)據(jù)存儲(chǔ)器,單片機(jī)可以自由讀寫USB存儲(chǔ)設(shè)備中的數(shù)據(jù),也可以自由定義其數(shù)據(jù)結(jié)構(gòu)。
3.3播放MP3文件(音頻解碼的實(shí)現(xiàn))
首先完成對(duì)VSl003和SPI總線的初始化,然后等待系統(tǒng)從U盤存儲(chǔ)介質(zhì)中打開MP3文件,從中讀取的一個(gè)扇區(qū)的數(shù)據(jù)放入Atmeag16的512 B緩沖區(qū)中,然后將數(shù)據(jù)發(fā)往VSl003,解碼芯片就會(huì)自動(dòng)播放出流暢的音樂。由于VSl003有32 B的數(shù)據(jù)緩存區(qū),一次可向其發(fā)32 B數(shù)據(jù)然后檢查DREQ引腳,當(dāng)DREQ為高時(shí)送下一個(gè)32 B數(shù)據(jù),發(fā)完一個(gè)扇區(qū)的內(nèi)容后再繼續(xù)從U盤中讀取下一個(gè)扇區(qū)內(nèi)容,重復(fù)操作直到文件播放完為止。
VS1003 是基于自主的數(shù)字信號(hào)處理器VS_DSP。它包含了針對(duì)MP3,WMA和WAV PCM+ADPCM音頻解碼所必須的全部代碼和數(shù)據(jù),MIDI合成器,共享串行接口,多速立體聲DAC和模擬輸出放大器及濾波器。同時(shí)有麥克風(fēng)放大器和ADC及ADPCM音頻編碼。為調(diào)試準(zhǔn)備了一個(gè)UART。
依賴于音頻數(shù)據(jù),且非設(shè)置為ADPCM編碼模式,MP3,WMA,PCMWAV,IMA ADPPCM WAV 或MIDI的數(shù)據(jù)流從SDI總線接收并解碼。解碼之后,如果SCI_AIADDR非零,則應(yīng)用代碼從寄存器所指向的地址開始執(zhí)行。然后數(shù)據(jù)流是否經(jīng)過低音,高音增強(qiáng)器,取決于SCI_BASS寄存器。之后,數(shù)據(jù)流向音量控制單元,同時(shí)拷貝數(shù)據(jù)進(jìn)音頻FIFO。
音頻FIFO 鎖存住數(shù)據(jù),通過音頻中斷將數(shù)據(jù)送進(jìn)采樣率變換器和DAC。音頻FIFO 的大小是2048立體聲(2x16bit)采樣,即8KB。采樣率變換器把所有不同的采樣率變?yōu)閄TALI/2,或128 次最高可用采樣率。這個(gè)變換用一個(gè)固定的輸入時(shí)鐘頻率,經(jīng)過復(fù)雜的PLL 時(shí)鐘配置后,幾乎允許無限制的采樣率精確度。對(duì)于12.288MHz 的時(shí)鐘,DAC 工作在128x48KHz 也就是6.144MHz 上,并建立一個(gè)立體聲同相位模擬信號(hào)。過采樣的輸出被片上的模擬濾波器進(jìn)行低通濾波。濾波后的信號(hào)前往耳機(jī)放大器。SDI數(shù)據(jù)被解碼,解碼的采樣率變換到內(nèi)部模擬DAC允許的范圍。如果找不到能被解碼的數(shù)據(jù),SCI_HDAT0 和SCI_HDAT1被設(shè)置為0并且模擬輸出靜音。
4 結(jié)語
采用VSl003實(shí)現(xiàn)基于ATmega16和Keil8.08的音頻編解碼功能,接口電路簡(jiǎn)單,控制程序易于編寫,且最終音頻播放清晰、自然。音質(zhì)效果和播放的連貫性都很不錯(cuò),在音響和汽車電子及數(shù)據(jù)采集存儲(chǔ)方面具有良好的應(yīng)用前景。
參考文獻(xiàn)
[1]張志良編:《單片機(jī)原理與控制技術(shù)》,機(jī)械工業(yè)出版社 2005
[2]張家田編:《DSP綜合應(yīng)用技術(shù)》,機(jī)械工業(yè)出版社 2007
[3]胡健棟編:《現(xiàn)代無線通信技術(shù)》,機(jī)械工業(yè)出版社 2007
作者簡(jiǎn)介:陳朝大,畢業(yè)于華中科技大學(xué),電子講師,軟件碩士,研究方向:?jiǎn)纹瑱C(jī)應(yīng)用、電子信息、智能控制.