#include "include.h" void bt_aec_process(u8 *ptr, u32 samples, int ch_mode); void bt_adc_process(u8 *ptr, u32 samples, int ch_mode); void bt_alc_process(u8 *ptr, u32 samples, int ch_mode); void mic_test_sdadc_process(u8 *ptr, u32 samples, int ch_mode); #if MIC_TEST_EN #define speaker_sdadc_callback mic_test_sdadc_process #else #define speaker_sdadc_callback sdadc_dummy #endif // MIC_TEST_EN #if BT_ALC_EN #define bt_sdadc_callback bt_alc_process #else #define bt_sdadc_callback bt_sco_process #endif //MIC analog gain: 0~13(共14级), step 3DB (3db ~ +42db) //adadc digital gain: 0~63, step 0.5 DB, 保存在gain的低6bit const sdadc_cfg_t rec_cfg_tbl[] = { /* 通道, 采样率, 增益, 通路控制, 保留, 样点数, 回调函数*/ {CH_MIC_PF0, SPR_16000, (2 << 6), ADC2DAC_EN, 0, 240, sdadc_dummy}, /* SPEAKER */ {CH_MIC_PF0, SPR_8000, (12 << 6), ADC2DAC_EN, 0, 240, bt_sdadc_callback}, /* BTMIC */ }; void audio_path_init(u8 path_idx) { sdadc_cfg_t cfg; memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t)); if (path_idx == AUDIO_PATH_BTMIC) { #if BT_AEC_EN if (xcfg_cb.bt_aec_en) { cfg.callback = bt_aec_process; } else #endif #if BT_ALC_EN if (xcfg_cb.bt_alc_en) { cfg.callback = bt_alc_process; } else #endif { cfg.callback = bt_adc_process; } if (bt_sco_is_msbc()) { cfg.sample_rate = SPR_16000; } cfg.gain = ((u16)BT_ANL_GAIN << 6) | BT_DIG_GAIN; } sdadc_init(&cfg); } void audio_path_start(u8 path_idx) { sdadc_cfg_t cfg; memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t)); sdadc_start(cfg.channel); } void audio_path_exit(u8 path_idx) { sdadc_cfg_t cfg; memcpy(&cfg, &rec_cfg_tbl[path_idx], sizeof(sdadc_cfg_t)); sdadc_exit(cfg.channel); adpll_spr_set(DAC_OUT_SPR); } u8 get_mic_dig_gain(void) { return BT_DIG_GAIN; }