新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機實現MP3播放的方法

        單片機實現MP3播放的方法

        作者: 時間:2016-12-02 來源:網絡 收藏

        3)VS1003的初始化

        如其它芯片一樣,初始化對于VS1003來說同樣是極其重要的。初始化的過程大致是這樣的:

        1.硬件復位:接XRESET拉低

        2.延時,將XDCS、XCS、XRESET置高

        3.向MODE中寫入0X0804

        4.等待DREQ為高

        5.設置VS1003的時鐘:SCI_CLOCKF=0x9800,3倍頻

        6.設置VS1003的采樣率:SPI_AUDATA=0xbb81,采樣率48k,立體聲

        7.設置重音:SPI_BASS=0x0055

        8.設置音量:SCI_VOL=0x2020

        9.這一步被很多人忽視,向VS1003發送4個字節的無效數據,用以啟動SPI發送

        實現代碼如下:

        void Mp3Reset(void)

        {

        XRESET=0;

        delay(100);

        XDCS=XCS=XRESET=1;

        wr_commad(0x00,0x08,0x04);

        delay(10);

        DREQ=1;

        while(!DREQ);

        wr_commad(0x03,0x98,0x00);

        delay(10);

        wr_commad(0x05,0xbb,0x81);

        delay(10);

        wr_commad(0x02,0x00,0x55);

        delay(10);

        wr_commad(0x0b,VOL_VALUE,VOL_VALUE); // 音量

        delay(10);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        }

        在進行了正確的初始化后,還要著重檢查一下VS1003的模擬部分是否正常

        將VS1003的所有DVDD、AVDD管腳以及XRESET、TEST(第32個引腳)接+3.0V,然后測量RCAP引腳,它應該是1.3V左右,否則芯片模擬部分未正常工作。

        4)正弦測試

        在上面的各種操作與檢測沒有問題后,就可以讓VS1003放出聲音了。可以利用VS1003自帶的正弦測試對音頻輸出進行測試。要啟動 VS1003的正弦測試,需要向其寫入正弦測試命令。這里提供啟動正弦測試的流程,在真實的硬件運行通過,最終的效果是在耳機中聽到單一頻率的正弦音(頻率可以通過程序來更改)。

        具體流程如下:

        1.進入VS1003的測試模式:SPI_MODE=0X0820

        2.等待DREQ為高

        3.將XDCS接低,而XCS要置高,選擇VS1003的數據接口

        4.向VS1003發送正弦測試命令:0X53 0XEF 0X6E 0X30 0X00 0X00 0X00 0X00

        其中0X30為頻率,用戶可以修改為其它值

        5.延時一段時間

        6.退出正弦測試,發送命令:0X45 0X78 0X69 0X74 0X00 0X00 0X00 0X00

        7.延時一段時間

        8.循環以上流程

        實現代碼如下:

        void Sintest(unsigned char x)

        {

        wr_commad(0x00,0x08,0x20);

        DREQ=1;

        while(!DREQ);

        XDCS=0;XCS=1;

        spi_write(0x53);

        spi_write(0xef);

        spi_write(0x6e);

        spi_write(x);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        delay(5000);

        spi_write(0x45);

        spi_write(0x78);

        spi_write(0x69);

        spi_write(0x74);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        spi_write(0);

        delay(5000);

        XDCS=1;

        }

        如果能夠通過這一步,就說明你的VS1003已經做好了為你播放MP3的準備了。下面的工作 就是將MP3文件的數據有條不紊地發給VS003,讓它來為你完成MP3的解碼和播放任務 。

        5)MP3文件數據寫入

        以上的對VS1003的初始化與測試都通過后,現在就可以給它發送MP3文件了。但是這時就又出現一個新的問題。MP3文件通常是比較大的,小的也要1M~2M,如果使單片機內部的Flash Rom的話,容量是遠遠不夠的。需要有一種大容量的存儲器來作為MP3文件的載體。在筆者的調試系統中采用了SD卡(256M)、U盤(1G)與移動硬盤(40G)來存儲MP3文件。關于SD卡與U盤的讀寫方法可以參看相關章節。這些大容量的存儲設備通常也是按照扇區來進行讀寫的,但在實際的應用中更多的是結合FAT32等文件系統來進行文件讀寫。文件系統部分可以參照《FAT32的存儲機制及其在單片機中的實現》。

        這里拋開存儲介質不談,只談數據的寫入方法。其實寫入數據的方法十分簡單。主要就是看DREQ信號,在VS1003的FIFO能夠接受數據的時候輸出高電平。每次可以寫入32個字節的數據。而DREQ變低時,單片機就要停止數據的發送。

        具體的寫數據的方法如下:

        1.將XDCS拉低

        2.等待DREQ為高

        3.通過SPI寫入數據

        4.在文件沒有結束前不斷重復2與3操作

        5.在所有的數據都發送完畢后,最后發送2048個無效字節,用以清除VS1003的數據緩沖區

        6.將XDCS置高

        以下是筆者的程序中的寫數據部分:

        XDCS=0;

        for(j=621;j<2783;j++)

        {

        for(k=0;k<8;k++)

        {

        MMC_get_data_LBA(j,64,get);

        for(i=0;i<64;i++)

        {

        DREQ=1;

        while(!DREQ);

        spi_write(get[i]);

        //delay(60000);

        }

        }

        }

        for(temp=0;temp<2048;temp++)

        {

        DREQ=1;

        while(!DREQ);

        spi_write(0);

        }

        XDCS=1;


        上一頁 1 2 3 下一頁

        關鍵詞: 單片機MP3播

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌兰察布市| 七台河市| 泸州市| 扶绥县| 香格里拉县| 扎兰屯市| 韩城市| 上高县| 长武县| 和龙市| 巫溪县| 平谷区| 朔州市| 广德县| 姚安县| 阜新| 兰西县| 东乌珠穆沁旗| 翼城县| 黔南| 耿马| 石渠县| 仁化县| 莱阳市| 宝丰县| 江阴市| 唐山市| 吉木萨尔县| 水富县| 团风县| 长宁区| 河西区| 驻马店市| 齐齐哈尔市| 华亭县| 太原市| 桐梓县| 游戏| 无锡市| 鹤壁市| 济阳县|