单片机实现MP3播放的方法
分的供电。) 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,如
单片机MP3播 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)