畢業(yè)論文-基于ATmega16的MP3的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
畢業(yè)論文-基于ATmega16的MP3的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
畢業(yè)論文-基于ATmega16的MP3的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
畢業(yè)論文-基于ATmega16的MP3的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
畢業(yè)論文-基于ATmega16的MP3的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩51頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 太原理工大學(xué)畢業(yè)設(shè)計(jì)(論文)用紙 緒論1.1 應(yīng)用背景與意義1.1.1 背景1998年韓國世韓(SEAHAN)推出了世界上第一臺MP3MPManF10,在世韓為人們帶來驚喜之后,美國的美國的帝盟(Diamond)公司挑頭,于1998年底推出了Rio PMP300,這是第一個(gè)讓全世界都印象深刻的MP3。MP3(MPEG Audio Layer 3)是采用國際標(biāo)準(zhǔn)MPEG(Moving Pictures Experts Group,動態(tài)圖象專家組)中的第三層音頻壓縮模式,對聲音信號進(jìn)行壓縮的一種格式。MPEG聲音壓縮算法是一種通用的聲音編碼技術(shù),它對音源的性質(zhì)沒有作任何假設(shè),而是利用人耳的聽覺特

2、性對聲音進(jìn)行壓縮。MPEG音頻層根據(jù)壓縮質(zhì)量和編碼復(fù)雜程度劃分為三層,即Layer1、Layer2、Layer3,且分別對應(yīng)MP1、MP2、MP3這三種聲音文件,并根據(jù)不同的用途,使用不同層次的編碼。MPEG音頻編碼的層次越高,編碼器越復(fù)雜,壓縮率也越高,MP1和MP2的壓縮率分別為4:1和6:1-8:1,而MP3的壓縮率則高達(dá)10:1-12:1。也就是說,一分鐘CD音質(zhì)的音樂,未經(jīng)壓縮需要10MB的存儲空間,而經(jīng)過MP3壓縮編碼后只有1MB左右??缛?1世紀(jì),MP3的高速發(fā)展使人們不再滿足于閃存那以MB為單位的容量。2000年1月,音頻硬件領(lǐng)域的老大哥創(chuàng)新推出了世界第一臺2.5寸硬盤MP3N

3、OMAD Jukebox,它采用了富士通6.4GB的2.5英寸硬盤作為HYPERLINK /view/25689.htm存儲介質(zhì),可以存儲相當(dāng)于100多張CD的MP3音樂,容量遠(yuǎn)遠(yuǎn)超過了當(dāng)時(shí)的閃存MP3,不過體積也非常驚人,竟比一般的CD隨身聽還要大,其外形也跟CD隨身聽非常相似。雖然采用硬盤介質(zhì),但為了保證在運(yùn)動時(shí)音樂能流暢地進(jìn)行播放,創(chuàng)新為其設(shè)計(jì)了可支撐5分鐘的8MB防震緩存,這樣即使在外出及移動的條件下也不會出現(xiàn)音樂跳軌現(xiàn)象。當(dāng)日歷翻到2014年這一頁的時(shí)候,MP3隨身聽已經(jīng)經(jīng)歷了數(shù)年的發(fā)展,而隨身聽市場的競爭亦趨于白熱化,幾乎每個(gè)星期甚至每天都會有新品MP3的推出,其發(fā)展的速度實(shí)在驚人

4、!但一體化的設(shè)計(jì)導(dǎo)致存儲容量固定,如果想下載更多的歌曲還得重新購買新的產(chǎn)品,造成了重大的浪費(fèi),另一方面,一體化又限制了MP3播放器在其他領(lǐng)域的應(yīng)用,比如在一些固定場所使用MP3(非便攜式),不方面拆卸。于是,將存儲器和播放器分離成為MP3的另一個(gè)發(fā)展方向。1.1.2 意義基于ATmega16的音樂播放器應(yīng)用的方面特別廣,不僅便攜簡單,而且在一些特殊環(huán)境,如車載MP3,浴室MP3,這些不易移動的產(chǎn)所有很廣泛的用途,別且可以作為很多系統(tǒng)的輔助功能,如智能家具,智能手機(jī)的一個(gè)功能模塊。本論文設(shè)計(jì)的MP3在于播放器與存儲器相分離的思想,U盤在市場上很容易買到,支持常用的文件系統(tǒng)FAT12,FAT16以

5、及FAT32,并且支持容量達(dá)100G,只要手上有U盤,而且有MP3等音頻格式的文件,那么就可以使用本系統(tǒng)所提供的USB接口,直接插上去就可以播放音樂,同時(shí),通過顯示屏可以知道當(dāng)前播放的歌曲,還可以通過按鍵直接控制音量和歌曲,比起過去用flash保存的音樂要方便的多。 最后,對我們大學(xué)生而言,提高了解決問題的能力,增強(qiáng)了動手能力,熟練了一些常見電子芯片的使用。理論分析與方法論證2.1 理論分析針對MP3音樂播放系統(tǒng),要選擇合適核心控制芯片和外部芯片來配合實(shí)現(xiàn),因?yàn)楸菊n題要求基于ATmega16的控制芯片,所以核心控制芯片選擇ATmega16,下面分別介紹芯片選用原則和最終芯片和模塊的確定。2.1

6、.1 ATmega16開發(fā)板和下載器控制芯片已經(jīng)確定為ATmega16,那么如何將程序下載到單片機(jī)中?一種方法就是自己設(shè)計(jì)基于Atmega16的最小系統(tǒng)和必要的外圍電路;第二種方法就是利用已經(jīng)設(shè)計(jì)好的開發(fā)板,用現(xiàn)成的工具,直接下載到單片機(jī),而且現(xiàn)在的開發(fā)板都會為用戶提供外圍接口,使用戶能夠根據(jù)自己的需求去開發(fā)其它系統(tǒng)。第一種方法開發(fā)周期較長,所以采用第二種方法,選擇用現(xiàn)成的開發(fā)板。本課題選用由天翔電子公司設(shè)計(jì)的AVR開發(fā)板,如圖2-1,下載器使用由軒微科技出品的USBISP,不用JTAG的的原因是本系統(tǒng)占用的I/O會比較多,而JTAG會占用PC口,影響實(shí)驗(yàn)結(jié)果,USBISP有個(gè)缺點(diǎn)是不具備仿真

7、功能,如圖2-2。圖 2-1 AVR 開發(fā)板圖 2-2 USBISP下載器2.1.2 MP3解碼芯片首先聯(lián)想到能否用ATmega16單片機(jī)來直接對MP3音頻文件直接解碼?答案是不行的,因?yàn)閷纹瑱C(jī)而言,數(shù)字處理速度和資源都遠(yuǎn)遠(yuǎn)達(dá)不到,所以只能簡介通過外部解碼芯片來實(shí)現(xiàn)解碼,并播放歌曲。MP3解碼芯片常見的有VS100X系列、SAA775X系列、STA01X系列等;SAA775X系列是MP3播放器解碼芯片組功能最全,效果最好的芯片,但價(jià)格較貴;STA01X系列需要外加DAC,使用起來多有不便;VS100X系列自帶DAC輸出功能,而且能解碼的音頻格式也比較多,同時(shí)價(jià)格合理。經(jīng)過比較,選用VS100

8、3作為解碼芯片,該芯片支持MP3、WMA、WAV、MIDI、等格式的解碼,而且自帶DAC輸出;同時(shí)還可以調(diào)節(jié)音量、高低音等,更重要的是它還具有MIC功能,如需要還可以實(shí)現(xiàn)錄音功能。因此,選用VS1003作為本課題音頻解碼芯片。如圖2-3為VLSI公司生產(chǎn)的VS1003芯片圖,2-4為由天翔電子公司設(shè)計(jì)的接入外圍電路只提供與控制芯片接口的MP3播放器。 圖 2-3 VS1003圖 2-4 MP3播放器(模塊)2.1.3 USB總線設(shè)備接口芯片USB總線設(shè)備接口設(shè)備較多較雜,在本課題中選用有南京沁恒公司生產(chǎn)的CH375b芯片,它是全速USB設(shè)備接口,兼容USBV2.0,即插即用,外圍器件需要晶體電

9、容,支持HOST主機(jī)方式和DEVICE設(shè)備方式。在本地端,CH375b具有8位數(shù)據(jù)總線和讀、寫、片選控制線以及中斷輸出,可以方便地掛接到單片機(jī)/DSP/MCU等控制器的系統(tǒng)總線上。在USB主機(jī)方式下,CH375b還提供了串行通信方式,通過串行輸入、串行輸出和中斷輸出與單片機(jī)/DSP/MCU等相連接。CH375b的USB主機(jī)方式支持各種常用的USB全速設(shè)備,外部單片機(jī)/DSP/MCU可以通過CH375b按照相應(yīng)的USB協(xié)議與USB設(shè)備通信。單片機(jī)可以通過CH375b讀寫U盤中的數(shù)據(jù),CH375提供了U盤文件級子程序庫單片機(jī)可以直接調(diào)用子程序讀寫U 盤中的文件數(shù)據(jù),硬件上只需要在原單片機(jī)系統(tǒng)中增加

10、一個(gè)CH375芯片,綜合成本較低。CH375的U 盤文件級子程序庫支持常用的FAT12、FAT16 和FAT32 文件系統(tǒng),支持容量高達(dá)100GB 的U 盤。如圖2-5為CH375b芯片,圖2-6為有天翔電子公司設(shè)計(jì)的接入外圍電路只提供與控制芯片接口的CH375U盤模塊。 圖 2-5 CH375B圖 2-6 CH375U盤模塊2.1.4 存儲介質(zhì)MP3播放器需要大容量的存儲器來存放歌曲,可以選擇Flash芯片存儲、SD卡、U盤等。如果選用Flash,則整個(gè)系統(tǒng)需要較多的I/O端口來讀取,更重要的一點(diǎn),也是本次課題要解決的一個(gè)問題,那就是整個(gè)系統(tǒng)的容量就被固定了,擴(kuò)容存在空難;而U盤和SD卡都是

11、不錯(cuò)的選擇,并且U盤和SD卡均容易購買的到,同時(shí)價(jià)格較為低廉,所以,存儲部分選用U盤讀取來實(shí)現(xiàn)。2.1.5 液晶顯示屏為了兼顧成本,選擇普通單色液晶顯示屏,常用的有LCD1602和LCD12864,在本課題中選擇LCD12864,因?yàn)長CD12864本身帶有字庫的功能,系統(tǒng)不需要添加外部字庫文件,就可以實(shí)現(xiàn)曲目等有效信息漢字顯示;而LCD1602只有常見的ASCII符號,要想顯示中文必須添加外部字庫文件。如圖2-7為液晶LCD12864。圖 2-7 LCD128642.1.6 控制設(shè)備控制設(shè)備選用鍵盤,但是鍵盤又分為編碼鍵盤和非編碼鍵盤,鍵盤上閉合鍵的識別由專用的硬件編碼器實(shí)現(xiàn),并產(chǎn)生鍵編碼號

12、或鍵值的稱為編碼鍵盤,如計(jì)算機(jī)鍵盤,而靠軟件編程來識別的稱為非編碼鍵盤;由于成本低廉和結(jié)構(gòu)簡單考慮,在本次課題中選擇非編碼鍵盤。2.2 方法論MP3播放器系統(tǒng)以ATmega16為控制核心,不僅要管理USB總線的通用接口芯片CH375b、MP3解碼芯片VS1003b、LCD12864液晶顯示屏和按鍵的處理,而且還管理USB存儲設(shè)備中的文件系統(tǒng),查找文件,寫文件等等。存儲器里的媒體文件首先要查詢,查詢到的文件確定是音頻文件(MP3等)后,把MP3路徑名寫到固定文件中,將所有的音頻文件路徑名寫到固定文件中后,按照文件偏移,讀取固定文件中的音頻文件路徑名,根據(jù)路徑名,讀取音頻文件到MCU的RAM中,然

13、后又被送到解碼芯片中,解碼后的音頻數(shù)據(jù)被還原成模擬音頻,再由揚(yáng)聲器傳出。由于ATmega16本身不支持USB接口功能,所以MCU無法直接與U盤完成數(shù)據(jù)傳輸?shù)墓δ埽鎯υO(shè)備需要通過自身的接口與CH375b相接。其它芯片是通過普通I/O端口連接的。軟件開發(fā)平臺在上一章中介紹了硬件設(shè)備的選擇,那么我們知道,只有硬件而沒有軟件的機(jī)器就是一個(gè)沒有靈魂的電人,所以,在這一章中介紹軟件的開發(fā)平臺,使沒有靈魂的電人讓它有自己的思想。3.1 編譯器的選擇我們知道,機(jī)器只認(rèn)識機(jī)器代碼,所以要將我們所編寫的程序翻譯成二進(jìn)制機(jī)器碼必須要使用編譯器。由于單片機(jī)內(nèi)存和程序存儲空間非常有限,好的編譯器可以優(yōu)化源代碼,使程序

14、的運(yùn)行消耗資源小、效率提高,所以選擇一個(gè)性能優(yōu)越的編譯器是必須的。AVR編譯器非常多,常見的有ICCAVR,GCCAVR,IAR AVR等;ICCAVR編譯器是市面上教科書使用它作為AVR例程的較多,集成代碼生成向?qū)?,雖然它的各方面性能均不是特別突出,但使用較為方便,一般作為教學(xué)方面的應(yīng)用;GCCAVR,GCC是Linux的唯一開發(fā)語言,GCC編譯器優(yōu)化程度可以說是目前世界上民用軟件中做的最好的,另外,它有一個(gè)非常大的有點(diǎn),免費(fèi)!在國外,使用它的人幾乎是最多的但,相對而言,它的缺點(diǎn)是操作比較麻煩;IAR實(shí)際上在國外比較多的人使用,但它的價(jià)格較為昂貴,所以,中國大陸內(nèi),使用它的開發(fā)人員比較少,只

15、有習(xí)慣用IAR的工程師才會去使用它。綜上分析,使用GCCAVR是非常不錯(cuò)的選擇。3.2 Atmel Studio 6簡介Atmel公司在2012年推出廣受歡迎的集成開發(fā)環(huán)境(IDE)的最新版ATmel Studio 6,支持基于Atmel32位ARM Cortex-M系列與Atmel 8/32位AVR系列的處理器(MCU)。Atmel Studio 6是免費(fèi)的IDE,提供專業(yè)質(zhì)量的開發(fā)工具,同時(shí)配有Atmel軟件框架,因而顯著降低了創(chuàng)建新設(shè)計(jì)的成本。利用Atmel軟件框架,設(shè)計(jì)人員可以獲得經(jīng)驗(yàn)證的大型免費(fèi)源代碼庫-包括近1000個(gè)設(shè)計(jì)樣例。利用此IDE更快的產(chǎn)品開發(fā)周期,配合更低的片上閃存成本

16、與速度更快的MCU,正在推動更多的設(shè)計(jì)工程師以C和C+語言編寫代碼,而不是使用匯編代碼。Atmel Studio 6使得工程師能夠輕易編寫、構(gòu)建和調(diào)試其C/C+和匯編代碼,還能夠以無縫方式集成具備輔助代碼編寫功能的編輯器、用于快速創(chuàng)建新項(xiàng)目的向?qū)Чぞ?、一個(gè)GNU C/C+編譯器、一個(gè)功能強(qiáng)大的仿真器,以及適用于愛特梅爾所有Cortex-M系列和AVR處理器的編程器與在線調(diào)試器的前端可視化工具。目前用于AVR設(shè)計(jì)的模擬器通過提供準(zhǔn)確的AVR MCU模型來加快應(yīng)用開發(fā)。仿真器不僅為CPU和中斷進(jìn)行仿真,而且還可以為片上I/O模塊仿真,無需實(shí)際的硬件即可進(jìn)行全面的應(yīng)用開發(fā)?;谏鲜鯝tmel Stu

17、dio 6各種優(yōu)勢,在本課題中使用此IDE進(jìn)行代碼編輯和程序編譯。Atmel Studio 6的代碼編輯繼承了Visio Studio 2010的風(fēng)格,所以編輯非常方便,比如自動補(bǔ)全功能,在目前一般單片機(jī)IDE是做不到這一點(diǎn)的!在上述的簡介中也提到Atmel Studio 6自帶編譯器為GNU C/C+編譯器,也就是上一屆在AVR系列中的GCCAVR,這就意味著Linux GCC編譯器直接移植到此IDE中,繼承了了GCC優(yōu)化程度高,運(yùn)行效率高等優(yōu)點(diǎn)。如圖3-1為Atmel Studio 6的工程界面。圖 3-1 Atmel studio 6工程界面3.3 下載器軟件工具經(jīng)過上兩節(jié)的論述,現(xiàn)在已

18、經(jīng)具備把寫的C源程序編譯成ATmega16單片機(jī)可以識別的機(jī)器語言,但是,還有一個(gè)問題,如何將在PC機(jī)上交叉編譯好的hex(機(jī)器碼,8進(jìn)制)與單片機(jī)產(chǎn)生聯(lián)系?也就是將程序下載到單片機(jī)上,讓其運(yùn)行,那么這就要用到下載器,上一章已經(jīng)介紹了USBISP下載器的硬件,那么下載不僅要有硬件提供支持,還要有相應(yīng)的軟件工具。為了適合開發(fā)板的下載需求,在本課題中使用軒微編程器控制平臺來對ATmega16來進(jìn)行下載,如圖3-2為軒微編程器控制平臺界面。圖 3-2 下載器工具系統(tǒng)設(shè)計(jì)前兩章已經(jīng)為系統(tǒng)提供了純硬件支持和軟件工具,接下來將對各個(gè)模塊建立起與主控芯片ATmega16的聯(lián)系,并對系統(tǒng)進(jìn)行整體的軟硬件設(shè)計(jì)。

19、由于ATmega16引腳在控制寄存器的控制下具有不同的功能,在這里對ATmega16的引腳做一個(gè)約定:在接下來作的圖中,除4-1,模塊與ATmega16連接的引腳只具備一個(gè)功能,而不具有其他功能,如有括號則說明使用括號中的功能,如圖4-3,PD4只具有輸入輸出功能,而PB5則具有SPI總線的功能,因?yàn)槔ㄌ栔幸呀?jīng)標(biāo)明。這樣就不會造成誤解。4.1 硬件系統(tǒng)總體設(shè)計(jì)方案ATmega16作為控制中心,它負(fù)責(zé)直接或間接控制所有的外圍模塊;MP3播放器系統(tǒng)需要音頻文件,那么ATmega16通過直接給CH375發(fā)送數(shù)據(jù)和命令,間接的從U盤中取得音頻數(shù)據(jù);獲得音頻數(shù)據(jù)后ATmega16再把數(shù)據(jù)傳送到VS100

20、3b,當(dāng)然,還得把獲得的文件名信息傳送給LCD12864液晶,這樣周而復(fù)始,達(dá)到播放MP3的目的;本課題還提供四個(gè)按鍵對播放歌曲和音量進(jìn)行控制,是單向的控制系統(tǒng),已達(dá)到靈活控制系統(tǒng),滿足用戶的需求。如圖4-2為MP3系統(tǒng)的總體規(guī)劃圖。圖 4-1 MP3系統(tǒng)總體規(guī)劃4.2 ATmega16處理器介紹ATmega16是基于增強(qiáng)的AVR RISC結(jié)構(gòu)的高性能、低功耗8 位CMOS微控制器。由于其先進(jìn)的指令集以及單時(shí)鐘周期指令執(zhí)行時(shí)間,ATmega16 的數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz。ATmega16擁有16K字節(jié)的系統(tǒng)可編程Flash,512字節(jié)的EEPROM,1K字節(jié)的片內(nèi)SRAM,并且內(nèi)部

21、集成很多總線。如圖4-2為ATmega16的引腳圖。圖 4-2 ATmega16引腳4.3 ATmega16與外部芯片的連接4.3.1 ATmega16與VS1003的連接表4-1簡要列出了VS1003b與ATmega16直接聯(lián)系的引腳功能說明,圖4-3為芯片引腳連接圖,連接具備某些原則,首先VS1003b的SI和SCLK必須和ATmega16的MOSI和SCK對應(yīng)連接,因?yàn)樵趯S1003b進(jìn)行讀寫數(shù)據(jù)時(shí)會用到SPI總線,而其余四個(gè)控制讀寫的引腳可隨意分配到ATmega16 32個(gè)普通的I/O,但是出于和后續(xù)的三個(gè)模塊相互間不產(chǎn)生影響,所以將剩余的四個(gè)控制引腳按圖4-3連接。表4-1 VS1

22、003b的主要引腳功能說明管腳管腳類型功能SI輸入串行輸入SCLK輸入串行總線的時(shí)鐘XCS輸入片選輸入,低電平有效XREST輸入低電平有效,異步復(fù)位端DREQ輸出數(shù)據(jù)總線,輸入總線XDCS輸入數(shù)據(jù)片選端/字節(jié)同步圖4-3 ATmega16與VS1003硬件連接4.3.2 ATmega16與CH375b的連接表4-2簡要列出了CH375b與ATmega16直接聯(lián)系的引腳功能說明,圖4-4為芯片引腳連接圖;CH375b有兩種讀寫方式,一種是串行讀寫,另一種是并行讀寫,串行讀寫靈活且比較節(jié)省引腳,而并行卻相反,但是效率高;由于天翔電子的這款U盤模塊沒有提供串口讀寫數(shù)據(jù)的接口,所以本課題只能用并行讀寫

23、數(shù)據(jù),也就是用更多的引腳去完成對應(yīng)的功能,如果不使用中斷的方式,那么理論上這13個(gè)引腳可以與ATmega16 32個(gè)普通的引腳任意連接,在本課題中,中斷請求信號采用的是查詢方式,所以也不需要接在ATmega16外中斷引腳上。為了不與其它模塊相互沖突,則采用圖4-4的連接方式。表4-2 CH375b的主要引腳功能說明管腳管腳類型功能DB7-DB0雙向三態(tài)8 位雙向數(shù)據(jù)總線,內(nèi)置弱上拉電阻RD輸入讀選通輸入,低電平有效,內(nèi)置弱上拉電阻WR輸入寫選通輸入,低電平有效,內(nèi)置弱上拉電阻CS輸入片選控制輸入,低電平有效,內(nèi)置弱上拉電阻INT輸出中斷請求輸出,低電平有效A0輸入地址線輸入,區(qū)分命令口與數(shù)據(jù)口

24、,內(nèi)置弱上拉電阻,當(dāng)A0=1 時(shí)可以寫命令,當(dāng)A0=0 時(shí)可以讀寫數(shù)據(jù)圖 4-4 ATmega16與CH375b硬件連接4.3.3 ATmega16與LCD12864的連接表4-3簡要列出了LCD12864與ATmega16直接聯(lián)系的引腳功能說明,圖4-5為芯片引腳連接圖;ST7920是LCD12864的控制器,也可支持串行傳輸和并行傳輸,在本課題中仍然采用并行的方式讀寫數(shù)據(jù),如圖4-5,從圖中可以看出,LCD12864的并行數(shù)據(jù)傳輸接口和CH375b的控制端口用沖突,但是不會收到影響,因?yàn)楫?dāng)LCD12864在讀寫數(shù)據(jù)時(shí),控制CH375b的引腳電頻可能會在改變,但卻不會給CH375b傳送數(shù)據(jù),

25、而當(dāng)CH375b在讀寫數(shù)據(jù)時(shí)LCD12864的控制端口處于不使能讀寫數(shù)據(jù)狀態(tài),所以兩者不會造成紊亂,系統(tǒng)會很順利的執(zhí)行。表4-3的主要引腳功能說明管腳管腳類型功能DB7-DB0雙向三態(tài)8 位雙向數(shù)據(jù)總線RS輸入地址線輸入,區(qū)分命令口與數(shù)據(jù)口,當(dāng)RS=1 時(shí)可以寫命令,當(dāng)RS=0 時(shí)可以讀寫數(shù)據(jù)RW輸入讀寫,RW=1時(shí)讀,RW=0時(shí)寫E輸入允許信號,相當(dāng)于片選RST輸入重新復(fù)位圖 4-5 ATmega16與LCD12864的硬件連接4.3.4ATmega16與按鍵的連接圖4-5為三個(gè)獨(dú)立按鍵與ATmega16的連接,理論上這三個(gè)按鍵也是隨意在Atmega16的任意一個(gè)普通引腳上連接的,但基于上述

26、幾個(gè)模塊的引腳分配,最終將按鍵確定為圖4-5;此處有三個(gè)按鍵,KEY3為狀態(tài)鍵,用來改變其余兩個(gè)按鍵KEY1,KEY2的職能,如果KEY3為選擇曲目狀態(tài),則剩下兩個(gè)按鍵的功能分別為KEY1下一曲,KEY2上一曲,如果KEY3為調(diào)節(jié)音量狀態(tài),則剩下兩個(gè)鍵的功能分別為KEY1音量調(diào)高,KEY2音量調(diào)低。這樣設(shè)計(jì)的好處在于增加了按鍵的靈活性,如果后續(xù)再繼續(xù)擴(kuò)展功能的話比較方便,比如增加暫停停止功能,又或者增加快進(jìn)快退,只需增加狀態(tài)即可,而不必用更多的獨(dú)立按鍵去控制,那樣既浪費(fèi)引腳,又使檢測按鍵的次數(shù)增加,增大控制延時(shí),降低系統(tǒng)效率。圖 4-6 ATmega16與按鍵的硬件連接系統(tǒng)軟件設(shè)計(jì)5.1 需求

27、分析需求分析的方法很多,常見的有功能分解法、結(jié)構(gòu)化分析法、信息建模法、面向?qū)ο蠓治龇椒ǖ龋鞠到y(tǒng)從復(fù)雜程度和自身的特性綜合考慮采用結(jié)構(gòu)化分析法,用自頂向下逐層分解策略,描敘本系統(tǒng)滿足功能需求的軟件模型,通過結(jié)構(gòu)化分析描述工具來理清本系統(tǒng)到底做什么。在畫數(shù)據(jù)流圖之前要先聲明一個(gè)問題:對某個(gè)系統(tǒng)而言沒有絕對的輸入和輸出;我們只是在抽象的層次去分析系統(tǒng)的輸入和輸出,圍繞系統(tǒng)的具體功能去抽象;例如在使用VS1003解碼芯片時(shí),可以對它寫入數(shù)據(jù),播放音樂,即輸出,也可以讀取它某個(gè)寄存器的值,獲取VS1003某時(shí)刻的狀態(tài),即輸入;但在對VS1003功能進(jìn)行抽象,它只具有播放功能,所以在這個(gè)抽象層次上認(rèn)為V

28、S1003只具有輸出。5.1.1 數(shù)據(jù)流圖數(shù)據(jù)流圖是結(jié)構(gòu)化分析方法中用于表示系統(tǒng)邏輯模型的一種工具,它以直觀的圖形清晰地描述了系統(tǒng)數(shù)據(jù)的流通和處理過程,圖中沒有任何物理元素,主要強(qiáng)調(diào)的是數(shù)據(jù)流和處理過程,可以很方便的了解系統(tǒng)的真正需求。 (1)頂層數(shù)據(jù)流圖。頂層數(shù)據(jù)流圖是最為復(fù)雜也是最容易看清系統(tǒng)到底是做什么的;在本系統(tǒng)中,按鍵為系統(tǒng)提供按鍵信號,CH375芯片為系統(tǒng)提供文件數(shù)據(jù),程序?yàn)橄到y(tǒng)提供系統(tǒng)初始值,在本系統(tǒng)中也可以用讀取配置文件的策略去得到系統(tǒng)初始值,但為了使系統(tǒng)更簡化,直接讓程序提供初始值,所以鍵盤、程序、CH375芯片做系統(tǒng)的輸入;ATmega16負(fù)責(zé)處理數(shù)據(jù)的計(jì)算和搬運(yùn),因此作為

29、系統(tǒng)的變換中心(也稱控制中心);系統(tǒng)將控制命令和數(shù)據(jù)輸出到VS1003解碼芯片、LCD12864,以控制音頻文件播放、控制音量以及顯示音頻文件名等,因此,VS1003、LCD12864一定作為系統(tǒng)的輸出;那么CH375是不是也可以作為輸出呢?為了能智能的讀取U盤中的所有音頻文件,而ATmega16又沒有足夠的內(nèi)存去存放所有的音頻路徑名,所以在播放音樂之前先把所有音頻文件的路徑名寫在固定文件中,以便后續(xù)操作,綜合分析CH375芯片既作為系統(tǒng)輸入又作為輸出;程序中有許多控制數(shù)據(jù)是隨一定條件下改變的,比如按鍵按下、音頻路徑名在文件中的偏移量等,所以將程序(內(nèi)存)也作為邏輯輸出,會使系統(tǒng)更清晰。通過上

30、述的簡要分析后,如圖5-1為頂層數(shù)據(jù)流圖,需要說明的一點(diǎn),在輸出流中都無一例外的使用了數(shù)據(jù)命令字眼,原因是本系統(tǒng)面對的是裸芯片,沒有任何操作系統(tǒng)的支持,除了CH375芯片有子程序庫的支持,VS1003芯片和LCD12864都沒有直接的接口去調(diào)用,所以對于底層的驅(qū)動本系統(tǒng)也是要考慮的,不僅要提供數(shù)據(jù),而且要把相應(yīng)控制命令加進(jìn)去。圖 5.1 頂層數(shù)據(jù)流圖(2)0層數(shù)據(jù)流圖頂層數(shù)據(jù)流圖顯然是非常復(fù)雜的,在MP3控制系統(tǒng)中幾乎是不知道系統(tǒng)是如何進(jìn)行數(shù)據(jù)處理進(jìn)而得到想要的結(jié)果,顯然要對頂層系統(tǒng)進(jìn)行分解。首先,本系統(tǒng)是沒有任何操作系統(tǒng)的,所以第一步就是要對VS1003解碼芯片、CH375芯片、LCD128

31、64進(jìn)行初始化操作,使這些芯片處在就緒狀態(tài)等待主控芯片對它進(jìn)行讀寫操作,每個(gè)芯片初始化成功后,提供一個(gè)正確信息,保證系統(tǒng)正常運(yùn)行;緊接著,程序提供一個(gè)目錄(程序默認(rèn)提供根目錄),開始對U盤中所有的音頻文件的路徑名保存在固定文件(ZCX.TXT),這樣做有助于對所有音頻文件進(jìn)行統(tǒng)一管理,并且使變換歌曲操作會很方便,錄入成功后提供錄入文件內(nèi)容的大??;然后,通過給定偏移量數(shù)據(jù)(默認(rèn)為0),在固定文件(ZCX.TXT)中讀取音頻路徑名,輸出音頻路徑名;最后,通過給定的音頻路徑名進(jìn)行MP3播放處理和液晶顯示處理,將音頻數(shù)據(jù)輸出到VS1003解碼芯片和LCD12864液晶;在MP3播放的同時(shí),加上按鍵處理

32、,以便隨時(shí)能夠接收按鍵信號,進(jìn)行相應(yīng)的按鍵處理操作,改變現(xiàn)有的狀態(tài)。通過上述分析后,如果5-2為0層數(shù)據(jù)流圖,圖中縱向在同一層次的表明沒有先后順序,在圖中除了邏輯輸出外,不加芯片代號的表明輸入輸出給程序(修改內(nèi)存),這些數(shù)據(jù)基本都是控制信息,在下一節(jié)的數(shù)據(jù)字典中會有體現(xiàn)。圖 5.2 0層數(shù)據(jù)流圖(3)1層數(shù)據(jù)流圖1層數(shù)據(jù)流圖中系統(tǒng)處理基本明朗,每一個(gè)處理都基本可以明確各自的職能,只有在按鍵處理部分有些模糊,因?yàn)榘存I處理部分可以控制按鍵狀態(tài),可以變換歌曲的上下一曲,還可以調(diào)節(jié)音量,因此將上述的按鍵處理再細(xì)化,并且有對應(yīng)的流程進(jìn)行處理,使系統(tǒng)更清晰,如圖5-3為1層數(shù)據(jù)流圖。圖 5.3 1層數(shù)據(jù)流

33、圖5.1.2 數(shù)據(jù)字典數(shù)據(jù)流條目MP3系統(tǒng)數(shù)據(jù) = VS1003初始化數(shù)據(jù) + CH375初始化數(shù)據(jù) + LCD12864初始化數(shù)據(jù) + 根目錄 + MP3控制數(shù)據(jù)MP3控制數(shù)據(jù) = 初始偏移量數(shù)據(jù) + 初始按鍵狀態(tài)數(shù)據(jù) + 新生成文件的文件名(ZCX.TXT)按鍵信號 = 狀態(tài)信號 + 加信號 + 減信號VS1003數(shù)據(jù)命令 = VS1003音頻數(shù)據(jù) + VS1003控制命令LCD12864數(shù)據(jù)命令 = LCD12864數(shù)據(jù) + LCD12864控制命令CH375數(shù)據(jù)命令 = CH375數(shù)據(jù) + CH375控制命令音量數(shù)值 = 無符號高八位的音量數(shù)值 + 無符號低八位的音量數(shù)值音頻文件名 =

34、 由最大30個(gè)字節(jié)組成的字符串正確信息 = true | false 偏移量數(shù)據(jù) = 當(dāng)前音頻文件名在新生成文件中的偏移量 + 下一首音頻文件名在新生成文件中的偏移量 + 上一首音頻文件名在新生成文件中的偏移量按鍵狀態(tài)數(shù)據(jù) = 變換歌曲狀態(tài) + 調(diào)節(jié)音量狀態(tài) + 按鍵連續(xù)狀態(tài)數(shù)據(jù)存儲條目 文件名 :ZCX.TXT組成 :所有音頻文件路徑名的集合組織方式 :按查找到的音頻文件名路徑的順序,依次寫入加工條目加工名:MP3控制系統(tǒng) 編號:無 輸入:MP3系統(tǒng)數(shù)據(jù),按鍵信號 輸出:VS1003數(shù)據(jù)命令,LCD12864數(shù)據(jù)命令,CH375數(shù)據(jù)命令,MP3控制數(shù)據(jù)加工名:VS1003管理 編號:1 輸入

35、:VS1003初始化數(shù)據(jù) 加工邏輯:初始化VS1003解碼芯片,使芯片處于就緒狀態(tài),隨時(shí)準(zhǔn)備工作。 輸出:正確信息加工名:CH375管理 編號:2 輸入:CH375初始化數(shù)據(jù) 加工邏輯:首先要做的是初始化CH375芯片,使芯片處于就緒狀態(tài),再者初始化CH375子程序庫,使系統(tǒng)可以隨時(shí)進(jìn)行讀寫U盤。 輸出:正確信息加工名:LCD12864管理 編號:3 輸入:LCD12864初始化數(shù)據(jù) 加工邏輯:LCD12864是由ST7920芯片控制的,準(zhǔn)確來說是初始化ST7920,使顯示液晶能正常工作。 輸出:正確信息加工名:保存U盤所有音頻文件路徑名 編號:4 輸入:根目錄 加工邏輯:根據(jù)根目錄,逐層檢查

36、文件,如果是音頻文件,則將文件路徑添加到ZCX.TXT文件中,如果不是則不做任何處理。 輸出:新生成文件(ZCX.TXT)大小加工名:按給定條件讀取新生成的文件 編號:5 輸入:偏移量數(shù)據(jù),新生成文件大小 加工邏輯:根據(jù)給定的偏移量數(shù)據(jù)先將文件偏移到指定位置,然后讀出音頻路徑名 輸出:音頻文件名加工名:MP3播放 編號:6 輸入:音頻路徑名 加工邏輯:根據(jù)音頻路徑名播放相應(yīng)的歌曲 輸出:VS1003音頻數(shù)據(jù)加工名:按鍵處理 編號:7 輸入:按鍵信號 加工邏輯:根據(jù)按鍵信號判斷是什么信號,如果是狀態(tài)信號則改變當(dāng)前按鍵的狀態(tài),如果是加減信號,則根據(jù)當(dāng)前的狀態(tài)來判斷是改變當(dāng)前文件控制信息還是調(diào)節(jié)音量

37、大小。 輸出:VS1003音量控制命令,按鍵狀態(tài)值,偏移量數(shù)據(jù)加工名:液晶顯示 編號:8 輸入:音頻路徑名 加工邏輯:根據(jù)給出的音頻路徑名,先處理得到音頻文件名,然后經(jīng)過給LCD發(fā)指令和數(shù)據(jù),顯示出音頻文件名 輸出:LCD12864音頻文件名數(shù)據(jù)加工名:按鍵狀態(tài)判斷 編號:7.1 輸入:加減按鍵信號,按鍵狀態(tài)數(shù)據(jù)加工邏輯:先判斷是否存在加減信號,然后根據(jù)按鍵狀態(tài)數(shù)據(jù)判斷加減按鍵信號執(zhí)行什么功能輸出:變換歌曲狀態(tài),調(diào)節(jié)音量狀態(tài)加工名:按鍵狀態(tài)處理 編號:7.2 輸入:按鍵狀態(tài)數(shù)據(jù),狀態(tài)按鍵信號 加工邏輯:先判斷是否存在狀態(tài)按鍵信號,然后修改當(dāng)前按鍵狀態(tài) 輸出:新的按鍵狀態(tài)數(shù)據(jù)加工名:變換歌曲 編

38、號:7.3 輸入:變換歌曲狀態(tài) 加工邏輯:先判斷按鍵是加信號還是減信號,然后修改當(dāng)前、上一曲、下一曲音頻文件名在新生成文件的偏移量數(shù)據(jù)。 輸出:偏移量數(shù)據(jù)加工名:調(diào)節(jié)音量 編號:7.4 輸入:變換音量狀態(tài) 加工邏輯:先判斷按鍵是加信號還是減信號,然后通過對VS1003解碼芯片寫入音量控制命令,達(dá)到變換音量的目的 輸出:VS1003音量控制命令5.2 軟件總體設(shè)計(jì)經(jīng)過需求分析階段的工作,建立了由數(shù)據(jù)流圖、數(shù)據(jù)字典和一組算法描述所定義的系統(tǒng)邏輯模型,系統(tǒng)“做什么”已經(jīng)清楚,下一步將進(jìn)入軟件總體設(shè)計(jì)階段,總體設(shè)計(jì)階段描述軟件的總體結(jié)構(gòu)。5.2.1 結(jié)構(gòu)化總體設(shè)計(jì)結(jié)構(gòu)化設(shè)計(jì)方法是一種把在需求分析中得到

39、的數(shù)據(jù)流圖映射為軟件結(jié)構(gòu)圖的基于數(shù)據(jù)流的設(shè)計(jì)方法,通過用數(shù)據(jù)流圖描繪信息系統(tǒng)在系統(tǒng)中的加工和流動情況。結(jié)構(gòu)化設(shè)計(jì)方法定義了一些不同的“映射”,利用這些映射可以把數(shù)據(jù)流圖變換成軟件結(jié)構(gòu)圖,他是在比模塊更高一層的層次上討論軟件結(jié)構(gòu)問題。按照數(shù)據(jù)流圖的性質(zhì),數(shù)據(jù)流圖分為兩種基本類型,變換型和事務(wù)型。變換型數(shù)據(jù)流圖基本呈線形形狀,由輸入、變換、輸出三個(gè)部分組成,變換是系統(tǒng)的變換中心。變換輸入端的數(shù)據(jù)流為系統(tǒng)的邏輯輸入,輸出端為邏輯輸出,而系統(tǒng)輸入端為數(shù)據(jù)流的物理輸入,輸出端為物理輸出。而事務(wù)型則是當(dāng)一個(gè)數(shù)據(jù)項(xiàng)到達(dá)處理模塊時(shí),將有多個(gè)動作之一,就是事務(wù)型,這種類型數(shù)據(jù)流圖呈輻射狀,及數(shù)據(jù)沿著輸入同路到達(dá)

40、下一個(gè)處理,這個(gè)處理根據(jù)輸入數(shù)據(jù)的類型分離成一束平行的數(shù)據(jù)流,然后選擇執(zhí)行若干個(gè)動作序列中的某一個(gè)來執(zhí)行。按照上述描述,可以分析得出本課題的數(shù)據(jù)流圖類型屬于變換型和事務(wù)型兩種類型的混合型,變換型是顯而易見的,因?yàn)閺氖贾两K本系統(tǒng)都是為播放MP3而服務(wù)的,那么事務(wù)型從何體現(xiàn)?根據(jù)最終處理得到音頻路徑名的處理方式上,既要交給VS1003解碼芯片,又要交給LCD12864顯示液晶,所以此又為事務(wù)型。5.2.2 軟件總體結(jié)構(gòu)圖的構(gòu)建通過對頂層和0層數(shù)據(jù)流圖的分析,MP3控制系統(tǒng)本質(zhì)上明確音頻路徑名后直接進(jìn)行播放,所以確定“按給定條件讀取新生成的文件”作為系統(tǒng)變換中心,變換中心確定以后就相當(dāng)于確定了主模塊

41、的位置,這就是軟件的頂層;第一層至少要有輸入、輸出、變換中心三種功能的模塊,因此首先要構(gòu)建音頻路徑名文件(將U盤中所有音頻文件的路徑名保存在指定文件中),所以音頻文件名錄入處理做為第一層的輸入,但前提必須首先調(diào)用芯片管理模塊,為主模塊提供可進(jìn)行讀寫的音頻文件名文件和必要的控制數(shù)據(jù);緊接著,需要一個(gè)變換中心模塊,用剛剛得到的數(shù)據(jù)去變換得到要播放的音頻路徑名,并得到音頻路徑名,傳給主模塊,最后主模塊再分別調(diào)用MP3播放、按鍵處理、液晶顯示模塊,在此過程中讀音頻路徑名和處理音頻路徑名是一個(gè)循環(huán)的過程,播完一曲再繼續(xù)下一曲;在MP3播放、按鍵處理。液晶顯示這三個(gè)模塊都分別要調(diào)用芯片管理模塊,所以芯片管

42、理模塊作為公共模塊要將其放在最底層。如圖5-6,為軟件總體結(jié)構(gòu)圖,圖中上層調(diào)用下層模塊,并且VS1003管理模塊,CH375管理模塊,LCD12864管理模塊作為基類模塊,上層不少模塊都在直接或間接的調(diào)用它們,所有為了不使圖形太過雜亂,某些模塊的輸出并沒有表示出來。5.6 軟件總體結(jié)構(gòu)圖5.3 軟件詳細(xì)設(shè)計(jì)在上一節(jié)已經(jīng)將系統(tǒng)劃分為多個(gè)模塊,并將它們按照一定的原則組裝起來了,同時(shí)確定了每個(gè)模塊的功能及模塊與模塊之間的外部結(jié)構(gòu),在本節(jié)中,將對系統(tǒng)各個(gè)模塊進(jìn)行詳細(xì)的設(shè)計(jì),用詳細(xì)設(shè)計(jì)工具清晰地描述。本系統(tǒng)將按照自底向上的順序一一剖析每個(gè)模塊,設(shè)計(jì)出程序的“藍(lán)圖”。5.3.1 CH375管理模塊CH37

43、5提供了U 盤文件級子程序庫,單片機(jī)可以直接調(diào)用子程序讀寫U 盤中的文件數(shù)據(jù),硬件上只需要在原單片機(jī)系統(tǒng)中增加一個(gè)CH375芯片,綜合成本較低。CH375的U 盤文件級子程序庫支持常用的FAT12、FAT16 和FAT32 文件系統(tǒng),支持容量高達(dá)100GB 的U 盤。AVR 單片機(jī)的增強(qiáng)版子程序庫,文件名是CH375HFB.A和libCH375HFD.A 以及CH375HFJ.R90,分別支持ICC、WinAVR-GCC、IAR 編譯環(huán)境,在本課題中,使用的是libCH375HFD.A,利用WinAVR-GCC編譯環(huán)境。1.CH375b子程序庫相關(guān)配置雖然在CH375b子程序庫中已經(jīng)給用戶提供

44、了許多現(xiàn)成的接口,但有些配置符號常量的值仍然需要重新定義,再者CH375b中引腳與ATmeag16引腳之間的聯(lián)系是動態(tài)的,用戶可以根據(jù)自己的喜好去連接CH375b,所以在子程序庫的頭文件CH375HFD.H定義了三個(gè)外部定義有子程序庫去掉用的三個(gè)接口實(shí)現(xiàn),分別是往CH375b寫命令的接口、寫數(shù)據(jù)接口以及從CH375讀數(shù)據(jù)的接口。下面對需要修改的符號常量和需要實(shí)現(xiàn)的三個(gè)接口作詳細(xì)闡述,因?yàn)樗诔绦蛑兄陵P(guān)重要。1)符號常量的重定義(1)F_CPU 8000000在Atmel Studio 6中標(biāo)準(zhǔn)庫中有一個(gè)延時(shí)庫,這個(gè)延時(shí)庫是根據(jù)ATmega16提供的晶振去計(jì)算延時(shí)的,延時(shí)非常準(zhǔn)確,比我們仿真測試

45、要準(zhǔn)確,所以,給定晶振的頻率很重要,在這里我們提供的是8MHz,默認(rèn)16MHz。(2)LIB_CFG_FILE_IO 2文件讀寫數(shù)據(jù)的復(fù)制方式,選擇2為雙DPTR復(fù)制”,針對特定硬件的數(shù)據(jù)復(fù)制方式,使用兩個(gè)DPTR,每傳輸一個(gè)字節(jié)需要8.5個(gè)機(jī)器周期,速度較快,適用于ATMEL/PHILIPS/SST 等具有雙DPTR 及DPS 的單片機(jī),默認(rèn)設(shè)置為1,1為內(nèi)部復(fù)制,適用于速度慢的MCS51單片機(jī)。(3)LIB_CFG_INT_EN 0CH375的INT#引腳連接方式,0為查詢方式,1為中斷方式,這里建議使用方式0,因?yàn)榇讼到y(tǒng)應(yīng)用單一,不需要中斷,默認(rèn)也是查詢,但這里最好顯示給出,使讀者一目了

46、然。(4)DISK_BASE_BUF_LEN 512表示磁盤緩存區(qū)的大小,緩存子程序庫數(shù)據(jù)和文件數(shù)據(jù)的。由于ATmega16片內(nèi)RAM只有1K,要定義的小一些,默認(rèn)也是512,但是最好也顯示給出,比較深刻理解子程序庫存放數(shù)據(jù)的機(jī)制。(5)MAX_BYTE_IO 32表示以字節(jié)為單位單次讀寫文件時(shí)的最大長度,默認(rèn)值為30,但是,VS1003的緩存為32,為了使讀寫數(shù)據(jù)的效率提高,將單次讀寫最大長度變?yōu)?2。(6)CH375_INT_WIRE ( PINB & 0 x10 )表示PINB.4, CH375b的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài),必須定義此符號常量,這

47、個(gè)引腳可以隨意一個(gè)普通引腳,根據(jù)運(yùn)算操作可得知。(7)NO_DEFAULT_CH375_F_QUERY1未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼,這是為優(yōu)化代碼而定義的,因?yàn)樵谧映绦驇熘杏泻芏啻a使用不到的,可以適量在預(yù)編譯的時(shí)候把它優(yōu)化掉。2)三個(gè)讀寫數(shù)據(jù)命令的實(shí)現(xiàn) 這三個(gè)函數(shù)非常重要,因?yàn)樽映绦驇熘刑峁┑拿總€(gè)接口幾乎都要調(diào)用它!而且在操作每一種芯片時(shí)這是必備的函數(shù)!(1)寫命令函數(shù):void xWriteCH375Cmd( unsigned char mCmd )首先先將A0置為1,因?yàn)锳0為1表示寫命令,接著將D0-D7輸出口賦予mCmd,然后將控制輸入輸出的寄存器置高,表

48、示并口D0-D7為輸出,最后分別將控制信號置位,CS置0,表示片選通,WR置0,表示寫選通,RD置1,表示讀關(guān)閉。寫完命令后做必要的延時(shí)。(2)寫數(shù)據(jù)函數(shù):void xWriteCH375Data( unsigned char mData )與寫命令函數(shù)基本類似,只是要將A0置為0,表示寫數(shù)據(jù),其它的都一樣。(3)讀數(shù)據(jù)函數(shù):unsigned char xReadCH375Data( void )首先讀來的數(shù)據(jù)要有內(nèi)存保存,所以事先定義一個(gè)字節(jié)的數(shù)據(jù),然后將控制輸入輸出的寄存器置低,表示并口D0-D7為輸入,接著將控制信號分別置位,CS置0,表示片選通,WR置1表示關(guān)閉寫端,RD置0,表示讀選

49、通,A0置0,表示可以讀數(shù)據(jù)。CH375子程序庫接口和全局變量 (1)子程序接口CH375子程序?yàn)橛脩籼峁┝撕芏喾奖愕慕涌冢@些接口在本系統(tǒng)中不會全部用到,會選擇性的使用,如表5-1為本系統(tǒng)用用到的接口,更詳細(xì)的接口列表可參閱CH375API介紹。表5-1 CH375子程序庫接口子程序簡稱用途和概述CH375Init初始化CH375 芯片,建議用CH375LibInit 代替CH375DiskConnect查詢U 盤是否連接,建議不要頻繁查詢CH375DiskReady查詢U 盤是否準(zhǔn)備就緒,通常在就緒后才能讀寫CH375FileOpen打開指定名稱的文件或者目錄、搜索枚舉文件CH375Fil

50、eEnumer搜索枚舉指定目錄下的文件,返回文件名CH375FileCreate新建文件并打開,如果文件已存在則先刪除再新建CH375ByteLocate以字節(jié)為單位移動當(dāng)前文件指針,進(jìn)入字節(jié)模式CH375ByteRead以字節(jié)為單位從當(dāng)前文件讀取數(shù)據(jù),進(jìn)入字節(jié)模式CH375ByteWrite以字節(jié)為單位向當(dāng)前文件寫入數(shù)據(jù),進(jìn)入字節(jié)模式CH375FileClose關(guān)閉當(dāng)前文件這里要說明一下數(shù)據(jù)讀寫方式,有兩種數(shù)據(jù)讀寫方式,一種是字節(jié)讀寫CH375ByteRead/CH375ByteWrite,另一種扇區(qū)讀寫CH375FileRead/Ch375FileWrite,本系統(tǒng)使用的是字節(jié)讀寫,因?yàn)锳

51、Tmega16的內(nèi)存只有1KB,而一般扇區(qū)最少也得512個(gè)字節(jié),并且加上文件數(shù)據(jù)去也差不多512個(gè)字節(jié),這兩項(xiàng)就足以1KB了,內(nèi)存是完全不夠用,所以選擇以字節(jié)的方式讀取,只需600字節(jié)的內(nèi)存就足夠了,而且在效率上也不影響本系統(tǒng)。(2)全局變量CH375子程序庫提供了很多標(biāo)志U盤狀態(tài)、文件狀態(tài)等全局變量,在本系統(tǒng)中一般標(biāo)志狀態(tài)信息的全局變量是用不到的,用的最多的是“mCmdParam”、“CH375vFileSize”“mCmdParam”記錄了當(dāng)前打開文件的文件名、文件數(shù)據(jù)等信息,“CH375vFileSize”記錄文件大小。CH375擴(kuò)展接口CH375子程序庫中已經(jīng)基本實(shí)現(xiàn)了所有功能,但在主

52、模塊中總希望它是以一個(gè)簡單的語句描述一個(gè)操作,而不需要一大串的命令。出于此考慮,將CH375芯片和CH375子程序庫的準(zhǔn)備操作定義為一個(gè)接口CH375_Prepare(),如圖5-7為CH375芯片和CH375子程序庫準(zhǔn)備操作流程圖。圖 5-7 CH375準(zhǔn)備流程圖5.3.2 VS1003管理模塊SPI總線簡介SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,如今越來越多的芯片集成了這種通信協(xié)議。SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個(gè)主設(shè)備和一個(gè)或多個(gè)從設(shè)備,

53、需要至少4根線,事實(shí)上3根也可以(單向傳輸時(shí))。也是所有基于SPI的設(shè)備共有的,它們是SDI(數(shù)據(jù)輸入),SDO(數(shù)據(jù)輸出),SCK(時(shí)鐘),CS(片選)。1)SDO 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入2)SDI 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出3)SCLK 時(shí)鐘信號,由主設(shè)備產(chǎn)生4)CS 從設(shè)備使能信號,由主設(shè)備控制其中CS是控制芯片是否被選中的,也就是說只有片選信號為預(yù)先規(guī)定的使能信號時(shí)(高電位或低電位),對此芯片的操作才有效。在點(diǎn)對點(diǎn)的通信中,SPI接口不需要進(jìn)行尋址操作,且為全雙工通信,顯得簡單高效。SPI接口的一個(gè)缺點(diǎn):沒有指定的流控制,沒有應(yīng)答機(jī)制確認(rèn)是否接收到數(shù)據(jù)。由于ATmega16

54、集成了SPI總線,而VS1003同樣是用SPI總線去接收數(shù)據(jù),所以本系統(tǒng)采用SIP總線對VS1003輸出音頻數(shù)據(jù)。VS1003基本接口所謂基本接口就是可以在VS1003解碼芯片進(jìn)行讀寫命令如表5-2為基本接口列表。表5-2 基本接口接口名稱參數(shù)接口功能Port_Init()無初始化與VS1003相關(guān)的引腳VS1003B_SPI_High()無SPI控制寄存器設(shè)置為高速狀態(tài)VS1003B_SPI_Low()無SPI控制寄存器設(shè)置為低速狀態(tài)VS1003B_WriteByte()uchar發(fā)送數(shù)據(jù),可以是數(shù)據(jù),也可以是指令VS1003B_WriteData()uchar將解碼的數(shù)據(jù)寫入VS1003B

55、VS1003B_WriteCmd()3個(gè)uchar寫命令,此命令用于控制VS1003B1)Port_Init()根據(jù)VS1003各引腳的功能,除了將DREQ的管腳類型初始化為輸入外,其余的管腳類型都定義為輸出。 2)VS1003B_SPI_High()和VS1003B_SPI_Low()這兩個(gè)接口屬于同類型接口,但卻是操作VS1003解碼芯片的必要條件,因?yàn)閂S1003讀寫數(shù)據(jù)必須用到SPI總線。ATmega16的SPI總線由8位寄存器SPCR控制,SPCR初始值都為0,SPCR每一位的功能可參考ATmega16的資料,在本系統(tǒng)中,無論SPI高低速狀態(tài),第六位SPE(SPI使能為)置1,第四位

56、MSTR(主從選擇)置1;在低速狀態(tài),將第一位和第零位(時(shí)鐘速率)置1,而在高速狀態(tài)將它們置0;還需設(shè)置的一個(gè)寄存器是SPSR(SPI狀態(tài)寄存器),只需設(shè)置SPI2X,置1后可使SPI速度加倍,無論高低速都必須設(shè)置。 3)VS1003B_WriteByte()該接口是為VS1003寫數(shù)據(jù)和命令的基礎(chǔ),1字節(jié)的數(shù)據(jù)或命令參數(shù),首先,由寄存器SPDR接收數(shù)據(jù),然后等待數(shù)據(jù)發(fā)送,數(shù)據(jù)發(fā)送結(jié)束的標(biāo)志由狀態(tài)寄存器SPSR的第七位(SPIF)置1決定,置1說明數(shù)據(jù)發(fā)送完畢! 4)VS1003B_WriteData() 該接口有1字節(jié)的數(shù)據(jù)參數(shù),首先將XDCS置0,表明要對VS1003寫數(shù)據(jù)操作,接著XCS

57、置0,確保VS1003選中,然后利用VS1003_WriteByte()寫入相應(yīng)的數(shù)據(jù),最后XDCS和XCS全部置1。 5)VS1003B_WriteCmd()該接口有3個(gè)參數(shù),分別為發(fā)送命令地址、數(shù)據(jù)高八位,數(shù)據(jù)低八位;首先將XDCS置1,表明是要對VS1003寫命令操作,接著XCS置0,確保VS1003選中,然后利用VS1003B_WriteByte()依次發(fā)送寫寄存器命令、寫入地址、數(shù)據(jù)高八位、數(shù)據(jù)低八位,最后將XCS置1。VS1003擴(kuò)展接口如表5-3為VS1003的擴(kuò)展接口,這些接口都是基于基本接口的組合。表5-3 VS1003擴(kuò)展接口接口名稱參數(shù)接口功能VS1003B_Init()

58、無VS1003B初始化VS1003B_WriteData32()無VS1003B FIFO緩存有32位,寫滿數(shù)據(jù)Volume_Add()無調(diào)高音量Volume_Sub()無調(diào)低音量1)VS1003B_Init()如圖5-8為VS1003初始化流程圖。圖5-8 VS1003初始化流程圖2)VS1003B_WriteData32()往緩沖區(qū)寫數(shù)據(jù)這個(gè)過程相對比較容易,就是調(diào)用32次VS1003_WriteData(),但是調(diào)用這個(gè)接口之前是有條件的,比如緩沖區(qū)中有數(shù)據(jù),那么是不允許往VS1003中些數(shù)據(jù)的,所以在調(diào)用之前要不斷的檢測DREQ,檢測到DREQ為1后,說明緩沖區(qū)為空,可以直接寫入32個(gè)

59、字節(jié)的數(shù)據(jù)。Volume_Add()和Volume_Sub()這兩個(gè)接口為同一類型接口,不同僅在與一個(gè)是對音量數(shù)值作減運(yùn)算,一個(gè)是作加運(yùn)算;先要不斷檢測DREQ,檢測到DREQ為1,然后再調(diào)用VS1003B_WriteCmd(),將相應(yīng)的音量控制命令和音量數(shù)值寫進(jìn)VS1003。5.3.3 LCD12864管理模塊LCD12864基本接口如表5-4為LCD12864基本接口。表5-4 LCD12864基本接口接口名稱參數(shù)接口功能LCD12864_readbyte()uchar讀數(shù)據(jù)或指令LCD12864_sendbyte()uchar,uchar發(fā)送一個(gè)字節(jié)的數(shù)據(jù)或指令LCD12864_read

60、byte()參數(shù)為決定是否讀取指令或數(shù)據(jù),LCD12864sendbyte()第一個(gè)參數(shù)決定是否發(fā)送數(shù)據(jù)或指令,第二個(gè)參數(shù)為要發(fā)送的數(shù)據(jù),如圖5-8為這兩個(gè)基本接口的流程圖。圖5-9 LCD12864_readbyte()和LCD12864_writebyte()流程圖LCD12864擴(kuò)展接口如表5-5為LCD12864擴(kuò)展接口。表5-5 LCD12864擴(kuò)展接口接口名稱參數(shù)接口功能LCD12864_readBF()無判斷LCD12864是否忙LCD12864_Init()無初始化LCD12864液晶LCD12864_sendstr()uchar*給LCD12864發(fā)送字符串(發(fā)送數(shù)據(jù))LCD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論