多媒体音频编解码器(CODEC)¶
1、简介¶
CI14LP芯片内置音频编解码器(DCODEC),提供模拟音频信号的录音(ADC)与播放(DAC)通路。DAC支持单端/差分输出、模拟/数字功放对接、LO/BO双输出端口;ADC支持多种采样率、混音模式、风噪滤波等特性。
DCODEC作为codec设备挂接在codec_manager音频管理组件之下,应用层录音/放音推荐直接使用CODEC MANAGER接口(参见Speech API-音频系统管理);本节描述的寄存器级驱动接口用于精细化调音或特殊通路配置场景。
2、API¶
2.1 codec_manager标准设备接口¶
| 函数名 | 描述 |
|---|---|
| dcodec_codec_init | CODEC整体初始化(ADC、DAC初始化) |
| dcodec_codec_start | ADC/DAC启动 |
| dcodec_codec_config | ADC/DAC采样率、数据位宽、通道配置 |
| dcodec_codec_stop | ADC/DAC关闭 |
| dcodec_codec_ioctl | ADC/DAC控制项(mute使能、增益配置等) |
2.2 DAC配置接口¶
| 函数名 | 描述 |
|---|---|
| dcodec_set_mode | 主从模式设置(DCODEC_MASTER / SLAVE) |
| dcodec_set_dac_protocol | DAC数据协议格式(IIS/左对齐/PARALLEL) |
| dcodec_set_dac_data_width | DAC数据宽度(16/18/20/24bit) |
| dcodec_dac_sampling_rate | DAC采样率设置(8K ~ 192K) |
| dcodec_dac_enable | DAC使能/关闭 |
| dcodec_dac_soft_mute | DAC软静音使能 |
| dcodec_dac_output_mode | DAC输出模式(单端/差分) |
| dcodec_dac_all_enable / dcodec_dac_all_disable | DAC整体使能/关闭 |
| dcodec_dac_lo_port_modulator | LO端口转换器类型(模拟/数字功放) |
| dcodec_dac_bo_port_modulator | BO端口转换器类型(模拟/数字功放) |
| dcodec_dac_modulator_enable | 转换器使能 |
| dcodec_dac_port_output_enable | DAC端口输出使能(LO/BO) |
| dcodec_dac_digital_spread_spectrum | DAC数字扩频配置(EMC优化) |
| dcodec_dac_analog_gain | DAC模拟增益设置 |
| dcodec_dac_digital_gain | DAC数字增益设置 |
| dcodec_dac_mixer_gain | DAC混频器增益设置 |
| dcodec_dac_mixer_mode | DAC混频模式(只有DAC / DAC加ADC) |
| dcodec_dac_drc_enable | DAC DRC使能 |
| dcodec_dac_drc_threshold | DAC DRC阈值设置 |
| dcodec_dac_drc_rate | DAC DRC速率设置 |
2.3 ADC配置接口¶
| 函数名 | 描述 |
|---|---|
| dcodec_adc_protocol | ADC数据协议格式 |
| dcodec_adc_data_width | ADC数据宽度 |
| dcodec_adc_sampling_rate | ADC采样率设置 |
| dcodec_adc_enable | ADC使能/关闭 |
| dcodec_adc_soft_mute | ADC软静音 |
| dcodec_adc_powerdown_enable | ADC掉电控制 |
| dcodec_adc_digital_filter_enable | ADC数字滤波使能 |
| dcodec_adc_high_pass_filter_enable | ADC高通滤波使能 |
| dcodec_adc_wind_noise_filter | ADC风噪滤波模式 |
| dcodec_adc_gain | ADC增益设置 |
| dcodec_adc_mixer_gain | ADC混频器增益设置 |
| dcodec_adc_mixer_mode | ADC混频模式(ADC only / ADC+DAC) |
| dcodec_dmic_clk_en | DMIC时钟使能 |
2.4 公共接口¶
| 函数名 | 描述 |
|---|---|
| dcodec_mclk_enable | MCLK使能 |
| dcodec_mixer_enable | 混频器使能 |
| dcodec_mixer_config | 混频器配置(DAC/ADC通路输入输出选择) |
3、关键类型¶
| 类型 | 说明 |
|---|---|
| dcodec_mode_t | 主从模式:DCODEC_MASTER、DCODEC_SLAVE |
| dcodec_data_width_t | 数据宽度:DCODEC_DATA_WIDTH_16BIT / 18BIT / 20BIT / 24BIT |
| dcodec_sampling_rate_t | 采样率:DCODEC_SAMPLING_RATE_8K ~ 192K共13档 |
| dcodec_in_out_t | 输入输出模式:正常/左右对换/混音/输入0 |
| dcodec_dac_modulator_t | DAC转换器:对接模拟功放(DCODEC_DAC_MODULATOR_FOR_AMPLIFIER_ANALOG)/ 数字功放 |
| dcodec_dac_port_t | DAC输出端口:DCODEC_DAC_PORT_LO、DCODEC_DAC_PORT_BO |
| dcodec_mix_func_t | 混频配置项:DAC模拟输入、DAC混频输入、ADC混频输出/输入、DAC数字输入 |
| dcodec_dac_mix_mode_t | DAC混频模式:DCODEC_DAC_MIX_MODE_DAC_ONLY、DAC_ADC |
| dcodec_channel_t | 通道:DCODEC_CHANNEL_LEFT、DCODEC_CHANNEL_RIGHT |
| dcodec_protocol_t | 数据协议:PARALLEL、LEFT_JUSTIFIED、IIS |
| dcodec_dac_output_mode_t | DAC输出模式:单端(SINGLE_ENDED)、差分(DIFFERENTIAL) |
| dcodec_adc_mix_mode_t | ADC混频模式:ADC_ONLY、ADC_DAC |
4、示例¶
1) 以下代码通过codec_manager标准接口初始化内部CODEC并开始录音(推荐方式):
#include "ci14lp_dcodec.h"
#include "codec_manager.h"
void dcodec_demo(void)
{
cm_codec_hw_info_t hw_info;
cm_sound_info_t sound_info;
//CODEC硬件信息(IIS通路与DCODEC关联)
hw_info.codec_io_mode = CODEC_IIS_MODE;
hw_info.adc_iis_base = IIS2_DCODEC_RX_BASE;
hw_info.dac_iis_base = IIS1_DCODEC_TX_BASE;
hw_info.iis_kick_frequency = SAMPLE_RATE_16K;
//初始化内部CODEC
dcodec_codec_init(&hw_info);
//配置录音参数:16K采样率、16bit、单声道
sound_info.sample_rate = SAMPLE_RATE_16K;
sound_info.sample_depth = IIS_DW_16BIT;
sound_info.channel_num = 1;
dcodec_codec_config(&sound_info, IO_DIRECTION_RX);
//启动录音
dcodec_codec_start(IO_DIRECTION_RX);
}
2) 以下代码直接配置DAC播放增益(调音场景):
#include "ci14lp_dcodec.h"
void dcodec_gain_demo(void)
{
//左通道DAC模拟增益
dcodec_dac_analog_gain(DCODEC_CHANNEL_LEFT, 0);
//左通道DAC数字增益
dcodec_dac_digital_gain(DCODEC_CHANNEL_LEFT, 0);
//对接模拟功放的LO端口
dcodec_dac_lo_port_modulator(DCODEC_DAC_MODULATOR_FOR_AMPLIFIER_ANALOG);
dcodec_dac_port_output_enable(DCODEC_DAC_PORT_LO, ENABLE);
}
5、其它¶
- DAC输出对接功放类型需与硬件设计一致:模拟功放使用
DCODEC_DAC_MODULATOR_FOR_AMPLIFIER_ANALOG,数字功放使用DCODEC_DAC_MODULATOR_FOR_AMPLIFIER_DIGITAL;scu_set_dcodec_dac_amplifier需同步配置。 - 播放前需控制功放standby脚(
scu_dcodec_dac_standby_en),并等待standby状态就绪。 - 使用dcodec录音的MIC直连场景与MADC(麦克风ADC)通路互斥使用,MADC参见外设API-MADC。
6、API 参考¶
本模块接口声明于 driver\ci14lp_chip_driver\inc\ci14lp_dcodec.h,实现位于 driver\ci14lp_chip_driver\src\ci14lp_dcodec.c。