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

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

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