output low for 100ms when insertion
This commit is contained in:
@@ -156,7 +156,7 @@ port p_sda = PORT_I2C_SDA;
|
|||||||
//out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚,用于控制其电源状态 */
|
//out port p_htr3235_sdb = PORT_HTR3236_SDB; /* 连接到HTR3236的SDB引脚,用于控制其电源状态 */
|
||||||
|
|
||||||
out port p_ctl_mute = PORT_CTL_MUTE;
|
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) */
|
/* 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;
|
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
||||||
any_mic_in = mic1_in || mic2_in;
|
any_mic_in = mic1_in || mic2_in;
|
||||||
|
|
||||||
// 检测单个mic插入事件(从拔出变为插入)
|
// 检测单个mic插拔事件
|
||||||
unsigned mic1_inserted = (mic1_in && !prev_mic1_in);
|
unsigned mic1_changed = (mic1_in != prev_mic1_in);
|
||||||
unsigned mic2_inserted = (mic2_in && !prev_mic2_in);
|
unsigned mic2_changed = (mic2_in != prev_mic2_in);
|
||||||
unsigned any_inserted = mic1_inserted || mic2_inserted;
|
unsigned any_changed = mic1_changed || mic2_changed;
|
||||||
unsigned state_changed = (any_mic_in != prev_any_mic_in) || any_inserted;
|
|
||||||
|
|
||||||
if (state_changed) {
|
if (any_changed) {
|
||||||
// 状态变化:立即mute mic防止pop音
|
// 状态变化:立即mute mic和DAC防止pop音
|
||||||
|
p_ctl_mute <: 0;
|
||||||
c_mic_det <: (unsigned)MIC_DET_MUTE;
|
c_mic_det <: (unsigned)MIC_DET_MUTE;
|
||||||
|
// c_mic_det <: (unsigned)MIC_DET_DAC_MUTE;
|
||||||
|
|
||||||
// 如果有mic插入,同时mute DAC防pop
|
// 配置ADC
|
||||||
if (any_inserted) {
|
//c_mic_det <: (unsigned)MIC_DET_REINIT_CODEC;
|
||||||
c_mic_det <: (unsigned)MIC_DET_DAC_MUTE;
|
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让插拔稳定
|
// 等1s让插拔稳定
|
||||||
delay_milliseconds(1000);
|
delay_milliseconds(900);
|
||||||
|
p_ctl_mute <: 0xf;
|
||||||
|
|
||||||
// 重新读取稳定状态
|
// 重新读取稳定状态
|
||||||
p_ctl_det :> det_val;
|
p_ctl_det :> det_val;
|
||||||
@@ -2176,17 +2179,15 @@ void mute_handler(chanend c_mic_det)
|
|||||||
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
mic2_in = ((det_val >> 2) & 1) ^ 1;
|
||||||
any_mic_in = mic1_in || mic2_in;
|
any_mic_in = mic1_in || mic2_in;
|
||||||
|
|
||||||
// 恢复DAC(插入时的临时mute已满1s)
|
// 恢复DAC状态
|
||||||
if (any_inserted) {
|
|
||||||
c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE;
|
c_mic_det <: (unsigned)MIC_DET_DAC_UNMUTE;
|
||||||
}
|
|
||||||
|
|
||||||
if (any_mic_in) {
|
if (any_mic_in) {
|
||||||
// 有mic插入,恢复mic音量
|
// 有mic插入,恢复mic音量状态
|
||||||
c_mic_det <: (unsigned)MIC_DET_UNMUTE;
|
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_mic1_in = mic1_in;
|
||||||
prev_mic2_in = mic2_in;
|
prev_mic2_in = mic2_in;
|
||||||
|
|||||||
Reference in New Issue
Block a user