diff --git a/Global/Global.c b/Global/Global.c index 053a8e7..14ac521 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -364,7 +364,10 @@ void System_AudioBringUp_Poll(void) BSP_DreamCorePowerEnable(1); BSP_BlueToothPowerEnable((uint8_t)(mGuiData[GUI_BL_SW].Current ? 1 : 0)); Power_LogRails("audio-up"); - rt_thread_mdelay(480); + /* 12V 一开功放默认不静音,会有一声啪。数字电源起来后先静音,再等时钟和模拟电源 */ + rt_thread_mdelay(20); + AD85020B_MasterMute(1); + rt_thread_mdelay(460); if (!powon) return; AD85020B_Init(); diff --git a/device/AD85020B/Drv_AD85020B.c b/device/AD85020B/Drv_AD85020B.c index b0e1a02..460f5c2 100644 --- a/device/AD85020B/Drv_AD85020B.c +++ b/device/AD85020B/Drv_AD85020B.c @@ -383,6 +383,13 @@ static AD85020B_StatusTypeDef AD85020B_ApplyPrototypeEq(void) return AD85020B_OK; } +AD85020B_StatusTypeDef AD85020B_MasterMute(uint8_t mute) +{ + AD85020B_I2C_Init(); + return AD85020B_I2C_Write(AD85020B_REG_SCTL3, + mute ? AD85020B_SCTL3_MMUTE : 0x00); +} + /** * @brief AD85020B 初始化 * @retval AD85020B_StatusTypeDef: 初始化结果 @@ -401,9 +408,11 @@ AD85020B_StatusTypeDef AD85020B_Init(void) if (status != AD85020B_OK) return status; wk_delay_ms(20); // 等待复位完成(文档未明确,建议10~50ms) - /* 步骤3:复位后恢复正常模式(BIT5=1) */ + /* 步骤3:复位后恢复正常模式(BIT5=1)。复位默认是不静音,立刻拉回主静音 */ status = AD85020B_I2C_Write(AD85020B_REG_SCTL6, AD85020B_SW_NORMAL); if (status != AD85020B_OK) return status; + status = AD85020B_I2C_Write(AD85020B_REG_SCTL3, AD85020B_SCTL3_MMUTE); + if (status != AD85020B_OK) return status; wk_delay_ms(10); /* 步骤4:配置输入格式(文档SCTL1,默认I2S格式,0x00) */ diff --git a/device/AD85020B/Drv_AD85020B.h b/device/AD85020B/Drv_AD85020B.h index 39bc96e..1d70e80 100644 --- a/device/AD85020B/Drv_AD85020B.h +++ b/device/AD85020B/Drv_AD85020B.h @@ -37,6 +37,7 @@ #define AD85020B_REG_SCTL1 0x00 // 输入格式配置 #define AD85020B_REG_SCTL2 0x01 // 采样率配置 #define AD85020B_REG_SCTL3 0x02 // 静音控制 +#define AD85020B_SCTL3_MMUTE 0x40 /* B6=1:主静音,退出时芯片做淡入 */ #define AD85020B_REG_MVOL 0x03 // 主音量控制 #define AD85020B_REG_SCTL4 0x0C /* EQ / DEQ / 音调;样机 0x90:EQ 开、左右独立 */ #define AD85020B_SCTL4_PROTO_EQ 0x90 @@ -78,6 +79,7 @@ AD85020B_StatusTypeDef AD85020B_I2C_Write(uint8_t reg, uint8_t data); AD85020B_StatusTypeDef AD85020B_I2C_Read(uint8_t reg, uint8_t *data); AD85020B_StatusTypeDef AD85020B_RamWrite24(uint8_t ram_addr, uint8_t bank, uint32_t value); AD85020B_StatusTypeDef AD85020B_RamRead24(uint8_t ram_addr, uint8_t bank, uint32_t *value); +AD85020B_StatusTypeDef AD85020B_MasterMute(uint8_t mute); AD85020B_StatusTypeDef AD85020B_Init(void); #endif