diff --git a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc index d28e3cf..8ad11ef 100644 --- a/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc +++ b/sw_usb_audio/app_usb_aud_phaten_golden_6ch/src/extensions/audiohw.xc @@ -156,7 +156,7 @@ port p_sda = PORT_I2C_SDA; //out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚,用于控制其电源状态 */ out port p_ctl_mute = PORT_CTL_MUTE; -in port p_ctl_det = PORT_CTL_DET; +port p_ctl_det = PORT_CTL_DET; /* Board setup for XU316 MC Audio (1v1) */ @@ -2150,25 +2150,28 @@ void mute_handler(chanend c_mic_det) mic2_in = ((det_val >> 2) & 1) ^ 1; any_mic_in = mic1_in || mic2_in; - // 检测单个mic插入事件(从拔出变为插入) - unsigned mic1_inserted = (mic1_in && !prev_mic1_in); - unsigned mic2_inserted = (mic2_in && !prev_mic2_in); - unsigned any_inserted = mic1_inserted || mic2_inserted; - unsigned state_changed = (any_mic_in != prev_any_mic_in) || any_inserted; + // 检测单个mic插拔事件 + unsigned mic1_changed = (mic1_in != prev_mic1_in); + unsigned mic2_changed = (mic2_in != prev_mic2_in); + unsigned any_changed = mic1_changed || mic2_changed; - if (state_changed) { - // 状态变化:立即mute mic防止pop音 + if (any_changed) { + // 状态变化:立即mute mic和DAC防止pop音 + p_ctl_mute <: 0; c_mic_det <: (unsigned)MIC_DET_MUTE; + // c_mic_det <: (unsigned)MIC_DET_DAC_MUTE; - // 如果有mic插入,同时mute DAC防pop - if (any_inserted) { - c_mic_det <: (unsigned)MIC_DET_DAC_MUTE; - } + // 配置ADC + //c_mic_det <: (unsigned)MIC_DET_REINIT_CODEC; + p_ctl_det <: 0; + delay_milliseconds(100); - debug_printf("mic det change: mic1=%d mic2=%d inserted=%d -> mute\n", mic1_in, mic2_in, any_inserted); + //debug_printf("mic det change: mic1=%d mic2=%d -> mute all & reconfig\n", mic1_in, mic2_in); + p_ctl_det :> det_val; // 等1s让插拔稳定 - delay_milliseconds(1000); + delay_milliseconds(900); + p_ctl_mute <: 0xf; // 重新读取稳定状态 p_ctl_det :> det_val; @@ -2176,17 +2179,15 @@ void mute_handler(chanend c_mic_det) mic2_in = ((det_val >> 2) & 1) ^ 1; any_mic_in = mic1_in || mic2_in; - // 恢复DAC(插入时的临时mute已满1s) - if (any_inserted) { - c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE; - } + // 恢复DAC状态 + c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE; if (any_mic_in) { - // 有mic插入,恢复mic音量 + // 有mic插入,恢复mic音量状态 c_mic_det <: (unsigned)MIC_DET_UNMUTE; - debug_printf("mic stable inserted -> unmute\n"); + debug_printf("mic stable -> unmute\n"); } - // 全拔出则保持mic mute,不发UNMUTE + // 全拔出则保持mic mute prev_mic1_in = mic1_in; prev_mic2_in = mic2_in;