微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机实现MP3播放的方法

单片机实现MP3播放的方法

时间:12-02 来源:互联网 点击:

分的供电。)

12.SCI_AICTRL[X](地址:0XC~0XF 可读写)

用于访问用户应用程序。

7)VS1003有应用电路

2、VS1003的驱动方法

这里就来介绍单片片对VS1003的控制方法,最终实现MP3播放。

1)准备工作

在对VS1003进行驱动之前,我们需要确保以下几点已经没问题,否则后面的工作都将是没有意义的。

1.VS1003各部分的供电电压与输出电压值是不同的。

供电部分

最小电压

推荐电压

最大电压

AVDD(模拟部分)

2.5V

2.8V

3.6V

CVDD(数字部分,内核)

2.4V

2.5V

2.7V

IOVDD(I/O电压)

CVDD-0.6V

2.8V

3.6V

2.VS1003与单片机正确可靠连接。

VS1003与单片机连接的引脚主要有7个,分别为 SO、SI、SCLK、/XCS、/XRESET、DREQ、/XDCS。只有保证它们与单片机正确可靠的连接,才能对VS1003进行有效的操作与控制。

2)写命令操作

要控制VS1003首先要实现的就是写命令,这是控制是否成功的前提。关于通信接口部分,是一种同步串行接口方式(SPI从机模式),它要求SCLK信号必须由外部电路产生,数据(SDATA)在SCLK的上升沿或下降沿时被写入。在笔者的实验中,采用的是软件模拟SPI,读者也可以选用带有硬件SPI的单片机(如STC12系列、AVR系列等),驱动效果会更好。写命令的过程如下:

1.等待DREQ为高(当DREQ为低时,说明芯片还没有就绪)

2.将XCS(命令片选)拉低

3.写入0x02

4.写入寄存器地址

5.分别写入数据的高字节与低字节

6.将XCS置高

实现代码如下:

void wr_commad(unsigned char addr,unsigned char hdat,unsigned char ldat )

{

DREQ=1;

while(!DREQ);

XCS=0;

spi_write(0x02);

spi_write(addr);

spi_write(hdat);

spi_write(ldat);

XCS=1;

}

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,如

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top