3. AUDIO ADC
AD16N AUDIO ADC仅支持单声道。
AD16N AUDIO 采样率支持情况
采样率
ADC
8000
yes
11025
yes
12000
yes
16000
yes
22050
yes
24000
yes
32000
yes
44100
yes
48000
yes
64000
null
88200
null
96000
null
表1 AUDIO_ADC采样率支持情况
AUDIO ADC - MIC 工作模式
AD16N AUDIO ADC - MIC 工作模式
ADC MIC
内置偏置电阻
外置偏置电阻
差分
表2 AD16N AUDIO ADC - MIC 工作模式
AUDIO ADC - LINEIN 工作模式
AD16N AUDIO ADC - LINEIN 工作模式
LINEIN
模拟直通DAC
ADC 转数字注册到DAC的注册表
表3 AD16N AUDIO ADC - LINEIN 工作模式
3.1. 《app_config.c》中的开机默认配置
如图1中Audio公共部分和AUDIO DAC包含以下配置:
1.vcm外挂电容; 2.vcmo0/1电压; 3.dac 模拟增益; 4.左右声道输出;
3.1.1. Audio公共部分
const bool config_vcm_cap_addon:vcm外挂电容配置;
软件默认不外挂电容;
如果软件选择了外挂电容,硬件却没有电容连接,会导致音频性能大幅降低;
VCM正确挂载了电容的情况下,软件悬着外挂电容会比不外挂电容音频性能更好;
3.1.2. AUDIO ADC 部分配置
VCOM0 / 1可作为内置偏置方案(MIC_BIAS)的偏置I/O,该配置与DAC使能VCOM0 / 1互斥!
- AUDIO_ADC - MIC配置
- AUDIO_MIC_RS_MODE const audio_adc_mic_rs_mode:AUDIO_ADC输入方式选择:
MICBIAS方案:VCOM0/1 输出内部MICLDO + 内置可调电阻
MICLDO方案: PA0 I/O 输出内部MICLDO + 外置电阻
外部提供偏置方案:外置电源 + 外置电阻
u32 const audio_adc_mic_bias_2_vcmo0:使能VCOM0 MICBIAS功能;
u32 const audio_adc_mic_bias_2_vcmo1:使能VCOM1 MICBIAS功能;
AUDIO_MICBIAS_RS const audio_adc_mic_bias_rs:使能MICBIAS方案时,选择内置偏置电阻大小
AUDIO_MICLDO_VS const audio_adc_mic_ldo_vs:使能MICLDO方案时,选择PA0输出LDO电压大小
AUDIO_MIC_INPUT_MODE const audio_adc_mic_input_mode:选择MIC输入IO,可选择PA0 / PA1
- AUDIO_ADC - MIC两级增益选择:
u32 const audio_adc_mic_pga_6db:MIC前级6dB增益,0:不使能 1:使能
AUDIO_MICPGA_G const audio_adc_mic_pga_g:MIC后级增益档位,根据枚举变量选择;
- AUDIO_ADC - LINEIN一级增益选择:
AUDIO_MICPGA_G const audio_adc_aux_pga_g:AUX增益档位选择,根据枚举变量选择;
使用内部偏置(MICBIAS)方案配置:
![]()
图1.2 MICBIAS方案配置
使用外部偏置(MICLDO)方案配置:
![]()
图1.3 MICBIAS方案配置
配置总览:
![]()
图1.4 AUDIO_ADC MIC输入配置
3.2. AUDIO ADC示例
如图8,有audio adc使用的示例,实例中做了以下事情:
① 初始化AUDIO 公共部分;
② 初始化AUDIO ADC模块,这一步完成之后audio dac就能起中断;
③ 初始化数据流句柄;
④ 注册数据流句柄;
⑤ 循环将ADC采样到的样点打印出来。
![]()
图2.1 audio adc demo
3.2.1. 打开AUDIO ADC硬件
① 初始化AUDIO ADC;
② 使能启动AUDIO ADC;
![]()
图2.2 audio adc 初始化
3.2.2. 停止AUDIO ADC运行
① 调用函数audio_adc_disable能停止AUDIO ADC的运行
![]()
图2.3 audio adc stop demo
3.2.3. 关闭AUDIO ADC硬件
① 关闭AUDIO ADC数字部分;
② 关闭AUDIO ADC模拟部分;
![]()
图2.4 close audio adc
3.2.4. 关闭AUDIO以及AUDIO ADC硬件
① 关闭AUDIO ADC数字部分;
② 关闭AUDIO ADC模拟部分;
③ 关闭AUDIO硬件的数字部分;
④ 关闭AUDIO硬件的模拟部分;
⑤ 关闭AUDIO的时钟;
![]()
图2.4 close audio adc & audio
3.3. AUDIO 全关闭示例
① 关闭AUDIO DAC数字部分;
② 关闭AUDIO DAC模拟部分;
③ 关闭AUDIO ADC数字部分;
④ 关闭AUDIO ADC模拟部分;
⑤ 关闭AUDIO硬件的数字部分;
⑥ 关闭AUDIO硬件的模拟部分;
⑦ 关闭AUDIO的时钟;
![]()
图3.1 all audio
3.4. AUDIO ADC管理架构
AD16N内置ADC,此DAC支持16bit精度,单声道,最高支持48k采样率;ADC固件管理框架同时支持最多2路ADC数据流输出。
AUDIO DAC相关的源代码文件:
apps/app/bsp/common/audio/audio_adc_api.c apps/app/bsp/cpu/uc03/audio_adc_cpu.c apps/include_lib/audio/audio_adc_api.h apps/include_lib/cpu/uc03/audio_adc.h下图是Audio DAC 管理框架对应的结构体。
![]()
图4.1 audio adc 管理框架
AUDIO DAC主要有以下函数:
void audio_adc_mode_init(void) u32 audio_adc_init_api(u32 sr, AUDIO_ADC_MODE mode, u32 ch) void audio_adc_off_api(void) void fill_audio_adc_fill(u8 *buf, u32 len) bool regist_audio_adc_channel(void *psound, void *kick) bool unregist_audio_adc_channel(void *psound)
3.4.1. AUDIO ADC驱动模式
3.4.1.1. 单端MICIN(使用芯片内部偏置电阻)
![]()
图4.2 单端MICIN使用内部偏置电阻示意图
3.4.1.2. 单端MICIN(使用芯片外部偏置电阻)
![]()
图4.3 单端MICIN使用外部偏置电阻示意图
3.4.1.3. 差分MICIN(使用外部偏置电阻)
![]()
图4.4 差分MICIN使用外部偏置电阻示意图
3.5. AUDIO ADC相关函数
3.5.1. 函数void audio_adc_mode_init(void)
此函数实现对ADC管理结构体和相关编码参数进行初始化,开机初始化调用一次即可。
3.5.2. 函数u32 audio_adc_init_api(u32 sr, ADC_MODE mode, u32 ch)
此函数实现对ADC硬件资源和相关寄存器进行初始化,此处会根据mode的值来选择ADC模式,其中参数:
1、sr:采样率,默认选择为24000; ① 8000; ② 12000; ③ 16000; ④ 24000; 2、mode:ADC模式,默认选择为ADC_MIC; ① ADC_MIC; ② ADC_LINE_IN; 3、ch:选择的ADC通道; 该参数仅对LINE_IN模式有效,MIC模式下传入0即可: 4、返回值:成功 0;
3.5.3. 函数void audio_adc_off_api(void)
此函数实现关闭所有ADC模块。
3.5.4. 函数bool regist_audio_adc_channel(void *psound, void *kick)
此函数实现将sound_out_obj注册到ADC中,AD140中一共有2路ADC,其中参数:
1、psound:sound_out_obj指向的sound结构体; 2、kick:kick函数; 3、返回值: 成功 true; 失败 false;
3.5.5. 函数bool unregist_audio_adc_channel(void *psound)
此函数实现将ADC注册列表中指定的sound_out_obj移除,其中参数:
1、psound:sound_out_obj指向的sound结构体; 2、返回值: 成功 true; 失败 false;
3.5.6. 函数void fill_audio_adc_fill(u8 *buf, u32 len)
此函数在ADC中断中被调用,用于将ADC转换出来放在buf里的缓存数据推到指定的空间保存,其中参数:
1、buf:ADC转换后样点存放的缓存buf; 2、len:该buf的大小,默认为64个byte,存有32个样点;该接口实现将ADC转换完成的数据样点写到相应的空间(存放于audio_adc_mge.sound[i]->p_obuf)中,其具体操作如下:
① ADC转换一次后,会在中断结束后调用该接口将转换的数据样点取走存放于相应的空间;
② 该接口首先会选择正在编码播放的通道,并找到存放样点数据的buf;
③ 一次性将buf中的数据写入注册了该ADC通道的audio_adc_mge.sound[i]->p_obuf里;
④ 启动kick继续下一轮编码;