刚开始调试 VS1003 不久,参照的模块自带的程序, RAM 和 Sine 的测试都通过了.往 VS1003 送 MP3 数据, 老是嘟嘟的声音, 都弄了好久了, 看到有的贴子说是硬件问题, 我检查了连接是对的,在SPI 模式 RX 和 TEST 连接到 I0VDD0.不过有一个问题,就是 DREQ 只有1.3V 的样子, 检查了稳压芯片输出, 2.5V 和 3.3V 对了的啊! 我于是找不到头绪了, 转来看程序, 我和范例对照了很多次,感觉没有问题啊! 头疼死了,不知道是怎么回事!请大侠们指教......
贴一下我的写数据代码
/*-----------------------------------------------------------
** 函数名称: PLAYMP3MUSIC
** 功 能: 播放一首 Mp3 .
** 参 数: filename: 歌曲文件名称(需包含文件路径)
** 返 回 值:
** 备 注: 函数处于调试阶段.
** 创建日期: 2010 - 10 -07
------------------------------------------------------------*/
FRESULT PLAYMP3MUSIC(const char *filename)
{
static FIL fsrc; // file objects
FRESULT res; // FatFs function common result code
UINT ByteRead;
BYTE buffer[512];
int i;
f_mount(0, &fs_sd);
/* 打开 MP3 文件*/
res = f_open(&fsrc, filename, (FA_OPEN_EXISTING | FA_READ));
/* 暂时放在死循环, 供调试使用 */
for(;;)
{
/* 读取 MP3 文件*/
res = f_read(&fsrc, buffer, 512, &ByteRead);
for(i = 0;i < 16;i ++)
{
/* 送 32 个字节*/
Send_VS_32Bytes(&buffer[(32 * i)]);
}
}
f_close(&fsrc);
f_mount(0,NULL);
return (res);
}
/*-----------------------------------------------------------
** 函数名称:Send_VS_32Bytes
** 功 能: 向 VS1003 写入 32 个字节的数据.
** 参 数: 欲写入数据的缓冲区地址.
** 返 回 值: 无.
** 备 注:
** 创建日期: 2010 - 10 -07
------------------------------------------------------------*/
void Send_VS_32Bytes(unsigned char *Data)
{
int i;
/* 设置成高速模式 */
//SetSPI_Speed(MP3_SPI, SPI_SPEED_HIGH);
while(DREQValue == 0);
//Delay_time(3);
for(i = 0;i < 32;i ++)
{
// while(DREQValue == 0);
Send_VS_OneByte(*Data ++);
}
/* 还原成低速模式 */
//SetSPI_Speed(MP3_SPI, SPI_SPEED_LOW);
}
/*-----------------------------------------------------------
** 函数名称: Send_VS_OneByte
** 功 能: 向 VS1003 写入数据.
** 参 数: 与写入的数据
** 备 注:
** 创建日期: 2010 - 10 -07
------------------------------------------------------------*/
void Send_VS_OneByte(UCHAR8 Data)
{
/* 拉低数据线 */
VS1003_XDCS_L;
/* 发送数据*/
SPIx_SenRecvONEByte(MP3_SPI, Data);
VS1003_XDCS_H;
VS1003_XCS_H;
}
有错误的地方,还请大虾们指出... |