USER GUIDE / AUDIO SYSTEM / AUDIO CODEC / OPERATION FLOW

操作流程

本章将提供一些有关如何启动/关闭编解码器、使编解码器处于待机状态以及如何控制 DAC、ADC 和 ALC 的参考寄存器配置。

注意:每个配置步骤最好保持 10ms 以上。

上电

步骤 1:为数字部分供电并重置音频编解码器。

步骤 2:配置寄存器 POP_CTRL_DACL[1:0]0xa0[6:5]至 2'b01,以设置 DAC 左声道的输出直流电压。

步骤 3:将寄存器 SEL_VREF[7:0]reg0x84[7:0]配置为 8'b000_0001。

步骤 4:为模拟部分供电。

步骤 5:将寄存器 EN_VREF reg0x80[0] 设置为 1,以设置参考电压。

步骤 6:逐步将寄存器 SEL_VREF[7:0]reg0x84[7:0]从 8'b0000_0001 改为 8'b1111_1111,或者直接将 reg0x84[7:0] 配置为 7'b1111_1111。建议每一步的间隔时间为 20ms。

步骤 7:等待 VCM 电压稳定在 AVDD/2 上。

步骤 8:将寄存器 SEL_VREF[7:0]reg0x84[7:0]配置为适当值(8'b0000_00000 除外),以降低功耗。

步骤 9:将寄存器 EN_IBIAS_DAC 0x80[1] 配置为 1,以启用 DAC 的电流源。

步骤 10:将寄存器 EN_BUF_DACL0xa0[2] 配置为 1,以启用 DAC 左声道的基准电压缓冲器。

步骤 11:将寄存器 POP_CTRL_DACL0xa0[6:5] 配置为 2'b10,以启用 DAC 左声道的 POP 音。

下电

步骤 1:保持电源接通并禁用 DAC 和 ADC 通道。

步骤 2:配置寄存器 POP_CTRL_DACL0xa0[6:5] 至 2'b01,初始化 DAC 左声道的 POP 音。

步骤 3:将寄存器 EN_BUF_DACL0xa0[2] 配置为 0,禁用 DAC 左声道的基准电压缓冲器。

步骤 4:将寄存器 EN_IBIAS_DAC 0x80[1] 设置为 0,禁用 DAC 的电流源。

步骤 5:将寄存器 SEL_VREF[7:0]reg0x84[7:0]配置为 8'b0000_0001。

步骤 6:将寄存器 EN_VREF reg0x80[0] 配置为 1'b0,禁用参考电压。

步骤 7:逐步将寄存器 SEL_VREFreg0x84[7:0]从 8'b0000_0001 改为 8'b111_1111,或直接将 reg0x84[7:0]配置为 8'b111_1111。建议每一步的间隔时间为 20ms。

步骤 8:等待 VCM 电压稳定在 AGND。

步骤 9:关闭模拟电源。

步骤 10:关闭数字电源。

ADC 启动

步骤 1:按照 7.1.6.1 节的说明开启 CODEC。启动音频编解码器。

步骤 2:将寄存器 EN_IBIAS_ADC 0x80[2] 配置为 1,以启用 ADC 的电流源。

步骤 3:将寄存器 EN_BUF_ADCL0xc0[2] 配置为 1,以启用 ADC 左声道的基准电压缓冲器。

步骤 4:将寄存器 EN_MICL0xc4[1] 配置为 1,以启用 ADC 左声道的 MIC 模块。

步骤 5:将寄存器 EN_ALCL0xc4[0] 配置为 1,以启用 ADC 左声道中的 ALC 模块。

步骤 6:将寄存器 EN_CLK_ADCL0xc0[1] 配置为 1,以启用 ADC 左声道的时钟模块。

步骤 7:将寄存器 EN_ADCL0xc0[0] 配置为 1,以启用 ADC 左声道的 ADC 模块。

步骤 8:将寄存器 INITIAL_ADCL0xc0[4] 配置为 1,结束 ADCL 模块的初始化。

步骤 9:将寄存器 INITIAL_ALCL0xc4[2] 配置为 1,结束左声道 ALC 模块的初始化。

步骤 10:将寄存器 INITIAL_MICL0xc4[3] 配置为 1,结束左声道 MIC 模块的初始化。

步骤 11:将寄存器 MUTE_MICL0xc4[4] 配置为 1,结束 ADC 左声道的静音。

步骤 12:配置寄存器 GAIN_MICL0xcc[1:0],以选择左声道 MIC 模块的增益。

步骤 13:配置寄存器 GAIN_ALCL0xc8[4:0],以选择左声道 ALC 模块的增益。

步骤 14:将寄存器 EN_ZERO_DET_ADCL0xc0[3] 设置为 1,以启用 ADC 左声道的过零检测功能。

步骤 15:开始录音

ADC 禁用

步骤 1:保持 ADC 通道工作并停止录音。

步骤 2:将寄存器 EN_ZERODET_ADCL0xc0[3] 设置为 0,禁用 ADC 左声道的过零检测功能。

步骤 3:将寄存器 EN_ADCL0xc0[0] 设置为 0,禁用 ADC 左声道的 ADC 模块。

步骤 4:将寄存器 EN_CLK_ADCL0xc0[1] 设置为 0,禁用 ADC 左声道的时钟模块。

步骤 5:将寄存器 EN_ALCL0xc4[0] 设置为 0,禁用 ADC 左声道的 ALC 模块。

步骤 6:将寄存器 EN_MICL0xc4[1] 设置为 0,禁用 ADC 左声道的 MIC 模块。

步骤 7:将寄存器 EN_BUF_ADCL0xc0[2] 配置为 0,禁用 ADC 左声道的基准电压缓冲器。

步骤 8:将寄存器 EN_IBIAS_ADC 0x80[2] 设置为 0,禁用 ADC 的电流源。

步骤 9:将寄存器 INITIAL_ADCL0xc0[4] 配置为 0,开始 ADCL 模块的初始化。

步骤 10:将寄存器 INITIAL_ALCL0xc4[2] 配置为 0,开始左声道 ALC 模块的初始化。

步骤 11:将寄存器 INITIAL_MICL0xc4[3] 配置为 0,开始左声道 MIC 模块的初始化。

DAC 使能

步骤 1:根据 7.1.6.1 节的说明为 CODEC 上电并输入静音信号。

步骤 2:将寄存器 EN_HPOUTL0xa4[0] 设置为 1,以启用 DAC 左声道的 DRVL 模块。

步骤 3:将寄存器 INITIAL_HPOUTL0xa4[2] 配置为 1,结束 DAC 左声道 DRVL 模块的初始化。

步骤 4:将寄存器 EN_VREF_DACL0xa0[3] 设置为 1,以启用 DACL 模块的参考电压。

步骤 5:将寄存器 EN_CLK_DACL0xa0[1] 配置为 1,以启用 DACL 模块的时钟模块。

步骤 6:将寄存器 EN_DACL0xa0[0] 配置为 1,以启用 DACL 模块。

步骤 7:将寄存器 INITIAL_DACL0xa0[4] 配置为 1,结束 DACL 模块的初始化。

步骤 8:将寄存器 MUTE_HPOUTL0xa4[5] 配置为 1,以结束 DAC 左声道中 DRVL 模块的静音状态。

步骤 9:配置寄存器 GAIN_HPOUTL0xac[4:0],以选择 DAC 左声道 DRVL 模块的增益。

步骤 10:播放音乐。

DAC 禁用

步骤 1:保持 DAC 通道工作并输入静音信号。

步骤 2:配置寄存器 GAIN_HPOUTL0xac [4:0] 至 5'b0_0000,以选择 DAC 左声道中 DRVL 的增益。

步骤 3:将寄存器 MUTE_HPOUTL0xa4[5] 配置为 0,使 DAC 左声道中的 DRVL 模块静音。

步骤 4:将寄存器 INITIAL_HPOUTL0xa4[4] 配置为 0,开始初始化 DAC 左声道中的 DRVL 模块。

步骤 5:将寄存器 EN_HPOUTL0xa4[0] 设置为 0,禁用 DAC 左声道的 DRVL 模块。

步骤 6:将寄存器 EN_DACL0xa0[0] 配置为 0,禁用 DACL 模块。

步骤 7:将寄存器 EN_CLK_DACL0xa0[1] 设置为 0,禁用 DACL 模块的时钟模块。

步骤 8:将寄存器 EN_VREF_DACL0xa0[3] 设置为 0,禁用 DACL 模块的参考电压。

步骤 9:将寄存器 INITIAL_DACL0xa0[4] 设置为 0,初始化 DAC 左声道的 DAC 模块。

ALC 启用

音频编解码器支持 ALC (自动电平控制)功能,可自动调整输入模拟信号的幅度。可以通过配置相应的寄存器来启用或禁用 ALC 功能。

与 ALCL 功能配置相关的寄存器位于 0x100 ~0x13C。

ALC 有两种控制 PGA(可编程增益放大器)增益的模式。使用这两种模式的前提是将寄存器 0x30[0] 设置为 1'b1,以选择使用 ALC 模块控制 PGA 增益。

保持寄存器0x124[6]为1,即可启用ALC的自动调节功能。PGA的增益将根据输入信号的幅度自动变化。

❖ 设置寄存器 0x10c[4:0],手动改变 PGA 增益。

步骤 1 设置 ALC 模块的最大控制电平和最小控制电平。

寄存器 0x114 和 0x118 控制 ALC 模块的最大电平。

max_level= {reg0x118,reg0x114}。max_level 与信号幅度 (dB) 的关系如下:

幅度 (dB) = 20log(max_level/16'h7fff)

其中,16'7fff 表示满量程振幅。

寄存器 0x11c 和 0x120 控制 ALC 的最小电平。

min_level= {reg0x120,reg0x11c}。min_level 与信号幅度(dB)之间的关系如下:

幅度(dB)=20log (min_level/16'h7fff);

步骤 2 选择采样率。

配置寄存器 0x128[2:0],选择音频采样率。

步骤 3 启用 ALC 模块。

将寄存器 0x124[6] 设置为 1'b1,以启用 AGC 功能。

步骤 4 选择用于控制 PGA 增益的 ALC 模块。

将寄存器 0x30[0] 设置为 1'b1,以选择用于控制 PGA 增益的 ALCL 模块。

步骤 5 观察当前的 ALC 输出增益。

读取寄存器 0x138 的值,观察 ALCL 模块的 AGC 增益。

ALC 禁用

步骤 1 禁用 ALC 模块。

将寄存器 0x124[6] 设置为 1'b0,禁用 AGC 功能。这样,ALC 输出增益将保持最后的值。

步骤 2 选择使用寄存器 0xc8[4:0]来控制 PGA 的增益。

将寄存器 0x30[0]设置为 1'b0,使用寄存器 0xc8[4:0]控制 ALCL 模块的增益。

DAC I2S 接口使能

步骤 1 为 pin_sys_clk 和 pin_dac_mclk 引脚提供稳定的时钟。

步骤 2 拉低 pin_rst_n 引脚,重置音频编解码器 IP。

步骤 3 通过软复位重置音频编解码器 IP。

  1. 将寄存器 0x00 设置为 8'hC0,软复位 IP。
  2. 将寄存器 0x00 设置为 8'hF1,释放软复位。

步骤 4 配置与 DAC I2S 功能相关的寄存器,使 I2S RX 工作在不同模式下。

  • I2S 表示 I2S 标准模式。
  • PCM_A 表示 PCMA 模式。
  • PCM_B 表示 PCM B 模式。
  • LSB 表示 I2S 左对齐模式。
  • RSB 表示 I2S 右对齐模式。

步骤 5 将 I2S 数据流输入 DAC 模块的 I2S 接口。

ADC I2S 接口使能

步骤 1 为 pin_sys_clk 和 pin_adc_mclk 引脚提供稳定的时钟。

步骤 2 拉低 pin_rst_n 引脚,重置音频编解码器 IP。

步骤 3 通过软复位重置音频编解码器 IP。

  1. 将寄存器 0x00 设置为 8'hC0,软复位 IP。
  2. 将寄存器 0x00 设置为 8'hF1,禁用软复位。

步骤 4 配置与 ADC I2S 功能相关的寄存器,使 I2STX 工作在不同模式下。

  • I2S 表示 I2S 标准模式。
  • PCM_A 表示 PCMA 模式。
  • PCM_B 表示 PCM B 模式。
  • LSB 表示 I2S 左对齐模式。
  • RSB 表示 I2S 右对齐模式。

步骤 5 使用 I2S 接口输出并行数据。