<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Cortex M3的音頻播放器的設計

          基于Cortex M3的音頻播放器的設計

          作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

          隨著科學技術(shù)的發(fā)展,MP3這一產(chǎn)品的技術(shù)越來越成熟,MP3現(xiàn)在以外形精致小巧,功能的的多樣性,且抗震省電等特點得到了廣大消費者的喜愛,且MP3歌曲可以隨時自由下載,更是將MP3的使用達到極大的普及,豐富了人們的文化生活。

          本文引用地址:http://www.ex-cimer.com/article/201609/303781.htm

          系統(tǒng)采用TI公司新推出的Cortex M3系列微控制器LM3S9B96。該芯片使用高性能的ARM Cortex-M3 32位的RISC內(nèi)核,工作頻率為80 MHz。完全滿足音頻文件的讀取、解碼、播放等功能。改進了市場中流行的MP3由于播放文件格式單一、人機界面的單調(diào)的缺陷。

          1 系統(tǒng)總體設計

          系統(tǒng)總體設計如圖1所示,以TI公司的微處理器LM3S9B96為控制核心,通過讀取SD卡*.mp3、*.wma、*.wav等格式的音頻文件,然后通過音頻解碼芯片VS1003實現(xiàn)解碼,最后通過外部音頻功放完成放大,推動揚聲器工作。LCD觸摸屏主要完成所播放歌曲名稱的顯示和人機交互功能。系統(tǒng)由ARM微處理器控制核心、音頻解碼模塊、功率放大模塊、SD卡存儲模塊、人機交互模塊等組成。系統(tǒng)框圖如圖1所示。

          基于Cortex M3的音頻播放器的設計

          2 硬件系統(tǒng)設計

          2. 1 Cortex M3 LM3S9B96微處理器

          LM3S9B96是TI公司最新推出的基于ARMv7體系架構(gòu)的處理器核,主要實現(xiàn)對SD卡音頻格式文件的讀取、然后將音頻文件發(fā)送到外部音頻解碼芯片VS1003。人機交互功能中的觸摸屏控制所包括的操作系統(tǒng)移植及應用軟件的執(zhí)行均是通過該處理器來完成。

          2.2 音頻編解碼器及與控制器的硬件連接

          音頻解碼芯片VS1003采用芬蘭VLSI公司出品的一款單芯片的MP3/WMA音頻解碼芯片,其內(nèi)部集成一個高性能低功耗的DSP處理器核,來實現(xiàn)將SD卡里的音頻數(shù)據(jù)流讀出并進行解析、轉(zhuǎn)化成模擬信號輸出。同時,微控制器通過SPI接口發(fā)出命令控制字實現(xiàn)對VS1003芯片的功能控制,如初始化、暫停、音量控制、播放時間的讀取等。其與LM3S9B96的硬件連接連接如圖2所示。

          基于Cortex M3的音頻播放器的設計

          2.3 SD卡與微控制器LM3S9B96的硬件連接

          系統(tǒng)中SD卡通過SPI接口與LM3S9B96進行連接,其主要實現(xiàn)MP3音頻文件的存儲,其電路連接如圖3所示。

          基于Cortex M3的音頻播放器的設計

          2.4 觸摸屏模塊功能與微控制器LM3S9B96的硬件連接

          LCD觸摸屏采用SSD1298驅(qū)動控制器和ADS7843觸摸屏控制芯片實現(xiàn)LCD的顯示和觸摸功能。其顯示功能主要包括:MP3文件名的顯示、歌詞顯示功能及一些附助信息,主要完成人機對話。觸摸屏控制芯片ADS7843 LCD觸摸屏和LM3S9B96的電路連接、如圖4所示。

          基于Cortex M3的音頻播放器的設計

          2.5 LCD觸摸屏與μC/GUI

          μC/GUI是一種嵌入式應用中的圖形支持系統(tǒng)。其適用于任意LCD控制器和CPU下任何尺寸的真實顯示或虛擬顯示。為了方便對LCD觸摸屏的控制,在LCD中繪制各種窗口,做出友好的人機互動界面,方便客戶的操作,在μC/GUI中提供了內(nèi)存管理、視窗管理器、各種常用的控件、字體管理、文本輸出、圖形繪制等功能,開發(fā)者借助輔助開發(fā)工具很容易生成用戶所需要的圖形界面,大大縮短了開發(fā)時間。

          其運行界面如圖5所示。

          基于Cortex M3的音頻播放器的設計

          3 系統(tǒng)軟件設計

          系統(tǒng)軟件設計分為三部分。

          1)μC/OS—II操作系統(tǒng)。μC/OS—II是一個支持多任務的操作系統(tǒng),本次設計將創(chuàng)建3個任務,觸摸屏任務、圖形界面任務和音樂播放任務,系統(tǒng)移植的μC/OS—II來實現(xiàn)任務的調(diào)度、任務切換和信號量處理。

          2)μC/GUI圖形用戶接口,μC/GUI是一種嵌入式應用中的圖形支持系統(tǒng),本設計中用移植了μC/GUI來實現(xiàn)的操作界面。

          3)數(shù)據(jù)存儲方面,播放MP3時,系統(tǒng)采用讀取存儲在SD卡中的MP3數(shù)據(jù)。

          3.1 μC/OS-Ⅱ操作系統(tǒng)

          μC/OS—II是嵌入微處理器的操作系統(tǒng),它是實時操作系統(tǒng),具有任務管理,文件管理,設備管理的底層支持。μC/OS—II具有執(zhí)行效率高、占用空間小、實時性能優(yōu)良和可擴展性強等特點,最小內(nèi)核可編譯至2 KB,它適用于多種微處理器,微控制器和數(shù)字處理芯片,已經(jīng)移植到了幾乎所有知名的CPU上。要使μC/OS-Ⅱ能正常運行,處理器必須滿足以下要求:

          1)處理器的C編譯器能產(chǎn)生可重入代碼。

          2)處理器支持中斷,并且能產(chǎn)生定時中斷(通常在10~100 Hz之間)。

          3)用C語言就可以開關(guān)中斷。

          4)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。

          5)處理器有將堆棧指針和其它CPU寄存器讀出和存儲到堆?;騼?nèi)存中的指令。

          本系統(tǒng)主要是將μC/OS—II移植處理器上需要修改3個ARM體系結(jié)構(gòu)相關(guān)的文件:OS_CPU.H、OS_CPU_A.ASM、OS_CPU_C.C進行了操作。移植包括以下幾步:

          1)用#define設置一個常量的值 (OS_CPU.H)

          2)聲明10個數(shù)據(jù)類型 (OS_CPU.H)

          3)用#define聲明3個宏 (OS_CPU.H)

          4)用C語言編寫6個簡單的函數(shù) (OS_CPU_C.C)

          5)編寫4個匯編語言函數(shù) (OS_CPU_A.ASM)

          3.2 μC/GUI的移植

          對于μC/GUI圖形系統(tǒng)應用不管什么目標系統(tǒng),大部分的圖形應用開發(fā)系統(tǒng)都可以在模擬器下運行,但最終的目的還是要在目標系統(tǒng)上運行。因此在移植?C/GUI的時候,目標系統(tǒng)必須具備如下幾點:

          1)CPU(8/16/32/64位)

          2)必要的RAM和ROM存儲

          3)LCD顯示器(任何類型及分辯率的)

          本次移植過程分為以下幾個步驟進行:


          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();