跳转至

多媒体音频编解码器(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。