mcu_ab568x/app/platform/bsp/bsp_audio.c
2025-05-30 18:03:10 +08:00

80 lines
2.1 KiB
C

#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;
}