新闻中心

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播

评论


技术专区

关闭