完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
VS1053B I2S输出,在切换歌曲的时候(如切到下一曲),瞬间出现咔咔声,对于要求严格的音响是不可以的。特向大哥们求解决方法!程序用原子哥的。
经单步测试,发现咔咔声出现在两个红色语句。见下面:void VS_Restart_Play(void) //切歌 //通过此函数切歌,不会出现切换“噪声” void VS_Restart_Play(void) { u16 temp; u16 i; u8 n; u8 v***uf[32]; for(n=0;n<32;n++)v***uf[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(v***uf)==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++)v***uf[n]=temp;//填充字节放入数组 for(i=0;i<2052;) { if(VS_Send_MusicData(v***uf)==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 } |
|
相关推荐
2个回答
|
|
功放用 ALC1312
|
|
|
|
软件控制ALC1312输出静音吧。
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 16:53 , Processed in 0.464036 second(s), Total 42, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号