mic gain logic

This commit is contained in:
Steven Dan
2026-04-21 19:55:38 +08:00
parent dea26c1b12
commit 9d0aa73cc5
3 changed files with 20 additions and 22 deletions

View File

@@ -38,7 +38,7 @@ endif()
# Firmware version (maps to BCD_DEVICE_J.M.N in USB descriptor) # Firmware version (maps to BCD_DEVICE_J.M.N in USB descriptor)
set(FW_VER_J 1) set(FW_VER_J 1)
set(FW_VER_M 1) set(FW_VER_M 1)
set(FW_VER_N 4) set(FW_VER_N 5)
set(FW_VERSION "v${FW_VER_J}.${FW_VER_M}.${FW_VER_N}") set(FW_VERSION "v${FW_VER_J}.${FW_VER_M}.${FW_VER_N}")
set(SW_USB_AUDIO_FLAGS ${EXTRA_BUILD_FLAGS} -Os set(SW_USB_AUDIO_FLAGS ${EXTRA_BUILD_FLAGS} -Os
@@ -94,8 +94,8 @@ set(APP_COMPILER_FLAGS_f5_music_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC
-DNUM_USB_CHAN_OUT=8 -DNUM_USB_CHAN_OUT=8
-DNUM_USB_CHAN_OUT_FS=2 -DNUM_USB_CHAN_OUT_FS=2
-DNUM_USB_CHAN_IN=2 -DNUM_USB_CHAN_IN=2
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=24 -DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=24 -DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
-DINPUT_FORMAT_COUNT=1 -DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1 -DOUTPUT_FORMAT_COUNT=1
#-DNUM_EX3D_CHAN_OUT=2 #-DNUM_EX3D_CHAN_OUT=2
@@ -204,6 +204,10 @@ set(APP_COMPILER_FLAGS_f6_f7_fps_uac1 ${SW_USB_AUDIO_FLAGS} -DI2S_CHANS_DAC=2
-DMAX_FREQ=48000 -DMAX_FREQ=48000
-DMCLK_441=512*44100 -DMCLK_441=512*44100
-DMCLK_48=512*48000 -DMCLK_48=512*48000
-DSTREAM_FORMAT_OUTPUT_1_RESOLUTION_BITS=16
-DSTREAM_FORMAT_INPUT_1_RESOLUTION_BITS=16
-DINPUT_FORMAT_COUNT=1
-DOUTPUT_FORMAT_COUNT=1
-DUAC1_MODE=1 -DUAC1_MODE=1
-DUSE_EX3D=1 -DUSE_EX3D=1
-DF6_F7_FPS_UAC1=1 -DF6_F7_FPS_UAC1=1

View File

@@ -169,7 +169,7 @@ void board_setup()
// tile 0 // tile 0
// called on tile 0 - start // called on tile 0 - start
#define NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE 0x1 // 0x1=1, 0dB (0x0, -1dB which is not used in this design) #define NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE 0x0 // 0x1=1, 0dB (0x0, -1dB which is not used in this design)
#define NAU88L21_PGA_GAIN_REG_MAX_VALUE 0x25+1 // 0x25=37, 36dB. +1 is for extra 1.5dB digital gain #define NAU88L21_PGA_GAIN_REG_MAX_VALUE 0x25+1 // 0x25=37, 36dB. +1 is for extra 1.5dB digital gain
#define NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE (NAU88L21_PGA_GAIN_REG_MAX_VALUE) #define NAU88L21_PGA_GAIN_REG_DEFAULT_VALUE (NAU88L21_PGA_GAIN_REG_MAX_VALUE)
@@ -219,7 +219,7 @@ void dac_volume(signed level)
void mic_volume(unsigned level) void mic_volume(unsigned level)
{ {
if (level == 0 || level == 1) if (level == 0)
{ {
// mute: 关闭PGA和输出放大器 // mute: 关闭PGA和输出放大器
unsafe {NAU88C22_REGWRITE(0x007E, 0, (client interface i2c_master_if)i_i2c_client);} unsafe {NAU88C22_REGWRITE(0x007E, 0, (client interface i2c_master_if)i_i2c_client);}
@@ -601,7 +601,7 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
// 从 Flash 恢复 mic/dac 音量 // 从 Flash 恢复 mic/dac 音量
{ {
unsigned char saved_mic = load_value(mic_vol_path); unsigned char saved_mic = load_value(mic_vol_path);
if(saved_mic <= NAU88L21_PGA_GAIN_REG_MAX_VALUE) if(saved_mic >= NAU88L21_PGA_GAIN_REG_MIN_USED_VALUE && saved_mic <= NAU88L21_PGA_GAIN_REG_MAX_VALUE)
codec_adc_pga_gain_reg_value = saved_mic; codec_adc_pga_gain_reg_value = saved_mic;
else else
save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认22(21dB) save_value(mic_vol_path, (unsigned char)codec_adc_pga_gain_reg_value); // 出厂默认22(21dB)
@@ -1581,11 +1581,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if((codec_adc_pga_gain_reg_value < NAU88L21_PGA_GAIN_REG_MAX_VALUE) && (flag_mic_mute == 0)) { if((codec_adc_pga_gain_reg_value < NAU88L21_PGA_GAIN_REG_MAX_VALUE) && (flag_mic_mute == 0)) {
uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value];
// 从mute(0)跳到首个LED档位(3)跳过无LED的1-2档 ++codec_adc_pga_gain_reg_value;
if (codec_adc_pga_gain_reg_value == 0)
codec_adc_pga_gain_reg_value = 3;
else
++codec_adc_pga_gain_reg_value;
if (!mic_det_muted) if (!mic_det_muted)
mic_volume(codec_adc_pga_gain_reg_value); mic_volume(codec_adc_pga_gain_reg_value);
g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37; g_mic_volume_level = (codec_adc_pga_gain_reg_value <= 37) ? codec_adc_pga_gain_reg_value : 37;
@@ -1604,11 +1601,8 @@ void button_task(chanend c_hidSendData, chanend cc_mic_level, chanend c_uac_vol,
if((codec_adc_pga_gain_reg_value > 0) && (flag_mic_mute == 0)) { if((codec_adc_pga_gain_reg_value > 0) && (flag_mic_mute == 0)) {
uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value]; uint8_t old_led_count = mic_gain_to_led[codec_adc_pga_gain_reg_value];
// 减小音量在首个LED档位(<=3)直接跳到mute(0)跳过无LED的1-2档 --codec_adc_pga_gain_reg_value;
if (codec_adc_pga_gain_reg_value <= 3)
codec_adc_pga_gain_reg_value = 0;
else
--codec_adc_pga_gain_reg_value;
if (!mic_det_muted) { if (!mic_det_muted) {
if (codec_adc_pga_gain_reg_value == 0) if (codec_adc_pga_gain_reg_value == 0)
mic_volume(0); mic_volume(0);

View File

@@ -89,15 +89,15 @@ const uint8_t led_d_physical_map[15] = {
const uint8_t mic_gain_to_led[39] = { const uint8_t mic_gain_to_led[39] = {
0, // [-1] 增益-1: 0个LED这个设计未启用 0, // [-1] 增益-1: 0个LED这个设计未启用
0, // [0] 增益0: 0个LED 1, // [0] 增益0: 0个LED
0, // [1] 增益1: 0个LED 1, // [1] 增益1: 0个LED
0, // [2] 增益2: 0个LED 1, // [2] 增益2: 0个LED
1, // [3] 增益3: 1个LED 1, // [3] 增益3: 1个LED
1, // [4] 增益4: 1个LED 2, // [4] 增益4: 1个LED
1, // [5] 增益5: 1个LED 2, // [5] 增益5: 1个LED
2, // [6] 增益6: 2个LED 2, // [6] 增益6: 2个LED
2, // [7] 增益7: 2个LED 2, // [7] 增益7: 2个LED
2, // [8] 增益8: 2个LED 3, // [8] 增益8: 2个LED
3, // [9] 增益9: 3个LED 3, // [9] 增益9: 3个LED
3, // [10] 增益10: 3个LED 3, // [10] 增益10: 3个LED
3, // [11] 增益11: 3个LED 3, // [11] 增益11: 3个LED