应客户要求,要做外挂FM,QN8075.
在原厂 AC692X软件问题处理说明文档,43点问题,《外挂FM IIC与SD卡复用》中描述了这个做法:
就是 iic 处理的时候关掉 SD 检测和电源,iic 处理完再开启检测,FM 模式退出后 开启 SD 电源。支持 AC692 所有 SDK 版本。
根据文档中的操作就可以复用了,但是在测试时发现,当样机在FM模式时插入TF卡会出现同时播出FM和TF音乐,根据以往经验,估计是FM 模式在切模式时没完全退出导致和其它播放模式串声,那就在在让FM退出一次就好。
FM 模块退出函数:
void task_fmmode_exit(void)
{
/*先关闭FM模块线程,再关闭FM变采样线程*/
fm_printf("task_fm_exit !!\n");
mutex_resource_release("fm");
fm_radio_powerdown();
task_clear_all_message();
fm_arg_close();
sd1_power_api(DEV_POWER_ON);
}
在TF卡插入消息这做处理:
case MSG_SD1_ONLINE:
puts("MSG_SD1_ONLINE\n");
if(task_get_cur() == TASK_ID_FM){
task_fmmode_exit();
delay_2ms(10);
}
if (dev_online_mount(sd1)) {
if (task_get_cur() == TASK_ID_MUSIC) { //当前为音乐任务不切换,把该消息给music任务处理
puts("MUSIC :MSG_SD1_ONLINE_SUCC\n");
task_post_event(NULL, 1, EVENT_SD1_ON_SUCC);
break;
}
if (task_switch(TASK_ID_MUSIC, sd1) == true) {
exit = false;
}
}
break;