新手入门
- 积分
- 7
- 金钱
- 7
- 注册时间
- 2015-8-19
- 在线时间
- 3 小时
|
60金钱
VS1053B I2S输出,在切换歌曲的时候(如切到下一曲),瞬间出现咔咔声,对于要求严格的音响是不可以的。特向大哥们求解决方法!程序用原子哥的。
经单步测试,发现咔咔声出现在两个红色语句。见下面:void VS_Restart_Play(void)
//切歌
//通过此函数切歌,不会出现切换“噪声”
void VS_Restart_Play(void)
{
u16 temp;
u16 i;
u8 n;
u8 vsbuf[32];
for(n=0;n<32;n++)vsbuf[n]=0;//清零
temp=VS_RD_Reg(SPI_MODE); //读取SPI_MODE的内容
temp|=1<<3; //设置SM_CANCEL位
temp|=1<<2; //设置SM_LAYER12位,允许播放MP1,MP2
VS_WR_Cmd(SPI_MODE,temp);//land 160617 //设置取消当前解码指令(咔咔)
for(i=0;i<2048;) //发送2048个0,期间读取SM_CANCEL位.如果为0,则表示已经取消了当前解码
{
if(VS_Send_MusicData(vsbuf)==0)//每发送32个字节后检测一次
{
i+=32; //发送了32个字节
temp=VS_RD_Reg(SPI_MODE); //读取SPI_MODE的内容
if((temp&(1<<3))==0)break; //成功取消了
}
}
if(i<2048)//SM_CANCEL正常
{
temp=VS_Get_EndFillByte()&0xff;//读取填充字节
for(n=0;n<32;n++)vsbuf[n]=temp;//填充字节放入数组
for(i=0;i<2052;)
{
if(VS_Send_MusicData(vsbuf)==0)i+=32;//填充
}
}else VS_Soft_Reset(); //SM_CANCEL不成功,坏情况,需要软复位
temp=VS_RD_Reg(SPI_HDAT0);
temp+=VS_RD_Reg(SPI_HDAT1);
if(temp) //软复位,还是没有成功取消,放杀手锏,硬复位
{
VS_HD_Reset(); //硬复位
VS_Soft_Reset(); //软复位
}
VS_I2S_EN();//l重复使能I2S(咔咔)
}
void VS_I2S_EN(void)//启动I2S输出
{
VS_WR_Cmd(SPI_WRAMADDR,0xc017);//
VS_WR_Cmd(SPI_WRAM,0x00f3);//0x33
VS_WR_Cmd(SPI_WRAMADDR,0xc040);//
VS_WR_Cmd(SPI_WRAM,0x000C);//0x000c
}
|
|