diff --git a/Global/Global.c b/Global/Global.c index c8d47ef..51ea130 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -357,20 +357,29 @@ void System_AudioBringUp_Poll(void) return; s_audio_bringup_req = 0; LOG_I("PWR", "bring up audio rails"); - BSP_DreamCorePowerEnable(1); + /* LOGO 和彩灯期间不要求发音,电源在彩灯结束后才开。 + 12V 与 Dream 一起开:功放没有 I2S 时钟时写寄存器会停在静音。 + 等电源和时钟都稳后再初始化功放,并且只做一次,避免琴弦波形被第二次复位打乱。 */ BSP_HT7178PowerEnable(1); + BSP_DreamCorePowerEnable(1); BSP_BlueToothPowerEnable((uint8_t)(mGuiData[GUI_BL_SW].Current ? 1 : 0)); Power_LogRails("audio-up"); - /* 12V 升压刚打开时功放模拟电源未稳,立刻写寄存器会仍处于静音 */ - rt_thread_mdelay(80); + rt_thread_mdelay(480); + if (!powon) + return; AD85020B_Init(); App_Auto_Init(); /* App 协议走 UART4:须在开机后即解析,不能等到触摸选模式才 StartTask */ StartTask(); + /* Dream 刚上电会丢掉首包。等它起来后再发弦音色和主音量,并补发一次 */ + rt_thread_mdelay(400); + if (!powon) + return; + MasterVolume_Reapply(); + LoadConfig(); rt_thread_mdelay(400); if (!powon) return; - AD85020B_Init(); MasterVolume_Reapply(); LoadConfig(); MainTask_Sendmsg(MSG_ID_EC_VOL, app_adc_get_volume(), level, 0); diff --git a/device/AD85020B/Drv_AD85020B.c b/device/AD85020B/Drv_AD85020B.c index d84d2c1..b0e1a02 100644 --- a/device/AD85020B/Drv_AD85020B.c +++ b/device/AD85020B/Drv_AD85020B.c @@ -460,9 +460,8 @@ AD85020B_StatusTypeDef AD85020B_Init(void) - /* 样机 EQ:在解除静音前写入,避免先播出直通声音 */ - status = AD85020B_ApplyPrototypeEq(); - if (status != AD85020B_OK) return status; + /* 样机 EQ:在解除静音前写入。写失败也要继续解除静音,否则拨片和琴弦无声 */ + (void)AD85020B_ApplyPrototypeEq(); /* 步骤6:解除静音(文档SCTL3,MMUTE=0,0x00) */ status = AD85020B_I2C_Write(AD85020B_REG_SCTL3, 0x00);