|
最近在调试 VS1003 模块, 硬件是买的现成的模块, 感觉应该没有什么问题吧!以前也没做过类似的音乐方面的!所以觉得程序可能有问题.
我在初始化,和读写寄存器都没有问题, 写进去多少读出来也是多少! 初始化后读出来的缺省值和芯片手册的一样.问题就出现在 RAM 和 Sine 的测试上,
RAM 有时候测试正常,即返回值是 807F 但有时候全是 0, 不过正常的几率要大一点,但是 正弦测试就不是这样了, 几率很小, 偶尔能有声音, 并且这个声音是在我单步执行到 发送正弦测试命令后,并且马上退出调试它才会有声音出来,不会在调试程序的时候出来!觉得甚是奇怪,望大虾们指点...
/*-----------------------------------------------------------
** 函数名称: VS1003RAMTest
** 功 能: VS1003 的 RAM 测试.
** 参 数: 无
** 备 注:
** 创建日期: 2010 - 10 -07
------------------------------------------------------------*/
UINT VS1003RAMTest(void)
{
UINT regvalue = 0, temp;
temp = Read_VS_REG(SPI_MODE);
/* 使能 SDI 测试 */
Send_VS_Command(SPI_MODE, 0x0820);
while(DREQValue == 0);
VS1003_XDCS_L;
SPIx_SenRecvONEByte(MP3_SPI, 0x4d);
SPIx_SenRecvONEByte(MP3_SPI, 0xea);
SPIx_SenRecvONEByte(MP3_SPI, 0x6d);
SPIx_SenRecvONEByte(MP3_SPI, 0x54);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
Delay_time(1000);
VS1003_XDCS_H;
regvalue = Read_VS_REG(SPI_HDAT0);
/* 还原寄存器内容 */
Send_VS_Command(SPI_MODE, temp);
return (regvalue);
}
/*-----------------------------------------------------------
** 函数名称: VS1003SineTest
** 功 能: VS1003 的正弦测试.
** 参 数:
** 备 注:
** 创建日期: 2010 - 10 -07
------------------------------------------------------------*/
void VS1003SineTest(void)
{
UINT temp;
temp = Read_VS_REG(SPI_MODE);
/* 使能 SDI 测试 */
Send_VS_Command(SPI_MODE, 0x0820);
while(DREQValue == 0);
VS1003_XDCS_L;
SPIx_SenRecvONEByte(MP3_SPI, 0x53);
SPIx_SenRecvONEByte(MP3_SPI, 0xef);
SPIx_SenRecvONEByte(MP3_SPI, 0x6e);
SPIx_SenRecvONEByte(MP3_SPI, 0x30);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
Delay_time(500);
VS1003_XDCS_H;//应该能听到一个单一频率的声音吧.
while(DREQValue == 0);
//退出正弦测试
VS1003_XDCS_L;
SPIx_SenRecvONEByte(MP3_SPI, 0x45);
SPIx_SenRecvONEByte(MP3_SPI, 0x78);
SPIx_SenRecvONEByte(MP3_SPI, 0x69);
SPIx_SenRecvONEByte(MP3_SPI, 0x74);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
SPIx_SenRecvONEByte(MP3_SPI, 0x00);
Delay_time(500);
VS1003_XDCS_H;
/* 还原寄存器内容 */
Send_VS_Command(SPI_MODE, temp);
}
上面是我的测试程序. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|