9.8.2. 功能描述

9.8.2.1. Audio Codec时钟

../../../_images/clk.png

图 9.68 Audio Codec时钟框图

Audio Codec的时钟框图如上图所示,APBCLK用于控制寄存器以及FIFO,AUD_CLK(24.576MHz/22.5792MHz由CMU分频所得)同时提供给TX(播放)和RX(录音)部分。

RX部分通过寄存器FS_DMIC_IN配置了RX的采样频率,相应的过采样率128倍的时钟提供给DMIC I/F模块以及Decimation Filter,RX部分的HPF以及DVC的时钟则由AUD_CLK直接提供。

TX部分通过寄存器FS_OUT配置了TX的采样频率,相应的过采样率128倍的时钟提供给MIX、DVC、Interpolation Filter、Fade模块,过采样率512倍的时钟则提供给Sigma-Delta Modulation、PWM模块。

同样,Sigma-Delta ADC利用AUD_CLK时钟信号产生ADC所需要的时钟信号。

9.8.2.2. Audio Codec信号通路

../../../_images/signal.png

图 9.69 Audio Codec信号通路

上图为Audio Codec的信号通路示意图。

RXFIFO_ADC_EN控制ADC通路的数据,使能此通路,将ADC通路的数据写入RXFIFO0。

通过RXFIFO_CH0_EN/ RXFIFO_CH1_EN,可以分别控制DMIC通道的左/右声道的数据填入RXFIFO1。

DMIC左声道的数据(即DMIC_CLK为低时的DMIC_DATA数据)填入RXFIFO1的Channel0,DMIC右声道的数据(即DMIC_CLK为高时的DMIC_DATA数据)填入RXFIFO1的Channel1。若需要交叉DMIC的左右通道的数据,可以通过DMIC I/F模块的DATA SWAP功能,可以将DMIC的左/右声道的数据交换。

通过TXFIFO_CH0_EN/ TXFIFO_CH1_EN,分别控制TXFIFO中的左/右声道的数据,如若需要交叉OUT0通路和OUT1通路的数据,可以通过MIX0、MIX1的寄存器配置,实现OUT0/1通路的数据交换。

9.8.2.3. PGA

../../../_images/link.png

图 9.70 PGA

PGA是对驻极体麦克风的输入信号进行放大,能够提高ADC的动态范围。

PGA可通过寄存器进行配置增益,可配置增益范围为0~30dB,步进为2dB。PGA的输入端内置串联电阻6kΩ,此电阻配合外部连接的电容实现高通滤波器,用于滤除低频直流信号。

9.8.2.4. Sigma-Delta ADC

ADC为Sigma-Delta ADC,Sigma-Delta ADC采用Mash 2-2结构,SNR约90dB,过采样率128倍,支持8kHz/16kHz/32kHz/12kHz/24kHz/48kHz以及11.025kHz/22.05kHz/44.1kHz。

9.8.2.5. 抽值滤波器

Audio codec内置3路抽值滤波器,用于1x模拟MIC通路和2x DMIC通路。

模拟MIC对应的抽值滤波器Decimation Filter0下采样固定为128倍。DMIC对应的抽值滤波器Decimation Filter1/2的下采样可通过寄存器选择为64/128倍。

9.8.2.6. 高通滤波器

高通滤波器(HPF,-3dB cutoff < 1Hz),可以通过寄存器HPF_EN使能,此滤波器主要用于滤除ADC Offset。其中,寄存器HPF_Coefficient用于配置HPF的系数,寄存器HPF_Gain用于配置HPF的增益。如若高通滤波器未使能工作,则直接旁通输入信号到下一个模块。

9.8.2.7. 数字音量控制(DVC)

在每个TX、RX通路上均有设计独立的DVC模块,可以通过DVC_EN使能,如若未使能,则旁通输入信号到下一个模块。DVC的可调范围为-119.25dB to 71.25dB,步进0.75dB。

9.8.2.8. 插值滤波器

插值滤波器(Interpolation Filter)实现128倍的上采样,实现抽值滤波器的相反功能,依次采用半带滤波、CIC补偿滤波和CIC插值滤波,实现的上采样倍数分别为2、2、32。经过插值滤波器,得到高采样率的数字信号。

9.8.2.9. Sigma-Delta Modulation

经过插值滤波后,进行数字Sigma-Delta算法,获得PDM信号。其中,Sigma-Delta调制采用2阶-1bit结构。

9.8.2.10. PWM

PWM模块用于对PDM进行调制,调制方式为0代表25%占空比的时钟信号,1代表75%占空比的时钟信号,时钟频率为PDM的采样时钟频率,即128 * FS_OUT。另外,PWM支持差分模式,若PWM0使能差分模式,那么SPK_OUT0则输出PWM0,SPK_OUT1则输出反相PWM0。此时PWM1应配置为关闭状态。

9.8.2.11. 中断

../../../_images/irq.png

图 9.71 中断信号

由上图所示可看出Audio Codec的中断信号,各信号的具体如下:

ADCIN_IRQ_STA为ADC的RXFIFO接收到有效数据(即RXFIFO的数据多于阈值ADC_RXTH)时产生的中断信号,此时也会相应的产生ADCIN_DRQ信号;

ADCIN_OVRN_IRQ_STA为ADC的RXFIFO出现上溢出中断;

DMICIN_IRQ_STA为DMIC的RXFIFO接收到有效数据(即RXFIFO的数据多于阈值DMIC_RXTH)时产生的中断信号,此时也会相应的产生DMICIN_DRQ信号;

DMICIN_OVRN_IRQ_STA为DMIC的RXFIFO出现上溢出中断;

DMICIN_UDRN_IRQ_STA为DMIC的RXFIFO出现下溢出中断;

AUDOUT_IRQ_STA为TXFIFO数据空间充足(即TXFIFO的剩余的数据空间多于TXFIFO_TH)时产生的中断信号,此时也会相应的产生AUDOUT _DRQ信号;

AUDOUT_OVRN_IRQ_STA为DMIC的RXFIFO出现上溢出中断;

AUDOUT _UDRN_IRQ_STA为DMIC的RXFIFO出现下溢出中断。

9.8.3. 编程指南

9.8.3.1. 常用场景参数配置

  1. 使用DMIC通路收音,双通道收音,主时钟为24.576MHz,采样频率为48kHz,过采样率为128:

    • RX DMIC接口控制寄存器

      RX_DMIC_IF_CTL[11:9] = 0x0 //延时接收功能,根据需求配置

      RX_DMIC_IF_CTL[8] = 0x0 //配置抽取滤波器1、2的下采样率为128

      RX_DMIC_IF_CTL[7:6] = 0x3 //使能两路抽值滤波器

      RX_DMIC_IF_CTL[5] = 0x0 //DMIC左右通道数据不互换

      RX_DMIC_IF_CTL[4] = 0x1 //DMIC接口使能,输出DMIC_CLK

      RX_DMIC_IF_CTL[3:1] = 0x0 //DMIC采样频率配置48kHz

      RX_DMIC_IF_CTL[0] = 0x0 //主时钟配置24.576MHz

    • RX HPF1&2控制寄存器

      RX_HPF1&2_CTL[1:0] = 0x3 //使能高通滤波器

    • RX DVC1&2控制寄存器

      RX_DVC1&2_CTL[31:24] = 0xA0 //DVC2数字音量控制模块,根据需求配置

      RX_DVC1&2_CTL[23:16] = 0xA0 //DVC1数字音量控制模块,根据需求配置

      RX_DVC1&2_CTL[1:0] = 0x3 //使能两路DVC

    • DMIC RXFIFO控制寄存器

      DMIC_RXFIFO_CTL[1:0] = 0x3 //使能双通道RXFIFO

  2. 使用ADC通路收音,主时钟为24.576MHz,采样频率为48kHz,过采样率为128:

    • ADC滤波器控制寄存器

      ADC_IF_CTL[16] = 0x0 //ADC采用Mash2-2结构

      ADC_IF_CTL[11:9] = 0x0 //接收延迟功能,根据需求配置

      ADC_IF_CTL[6] = 0x1 //使能抽值滤波器

      ADC_IF_CTL[3:1] = 0x0 //ADC采样频率配置48kHz

      ADC_IF_CTL[0] = 0x0 //主时钟配置24.576MHz

    • ADC HPF0控制寄存器

      ADC_HPF0_CTL[0] = 0x1 //使能高通滤波器

    • ADC DVC0控制寄存器

      ADC_DVC0_CTL[23:16] = 0xA0 //DVC数字音量控制模块,根据需求配置

      ADC_DVC0_CTL[0] = 0x1 //使能DVC

    • ADC RXFIFO控制寄存器

      ADC_RXFIFO_CTL[0] = 0x1 //使能ADCFIFO

  3. 使用双通道播放,主时钟为24.576MHz,采样频率为48kHz ,过采样率为128

    • TX MIXER控制寄存器

      TX_MIXER_CTL[31:30] = 0x0 //不使能混音功能,通路配置为AUD_OUT

      TX_MIXER_CTL[12:8] = 0x2 //通路配置为AUD_OUT_R

      TX_MIXER_CTL[4:0] = 0x1 //通路配置为AUD_OUT_L

    • TX DVC3&4控制寄存器

      TX_DVC3&4_CTL[31:24] = 0xA0 //DVC4数字音量控制模块,根据需求配置

      TX_DVC3&4_CTL[23:16] = 0xA0 //DVC3数字音量控制模块,根据需求配置

      TX_DVC3&4_CTL[1:0] = 0x3 //使能两路DVC

    • TX Playback控制寄存器

      TX_PLAYBACK_CTL[14:12] = 0x0 //延时输出功能,根据需求配置

      TX_PLAYBACK_CTL[10:8] = 0x3 //滤波输出Shift比特数配置为默认值13比特(推荐使用默认值)

      TX_PLAYBACK_CTL[6:4] = 0x7 //插值滤波器使能

      TX_PLAYBACK_CTL[3:0] = 0x0 //主时钟配置24.576MHz,采样频率配置48kHz

    • TX SDM控制寄存器

      TX_SDM_CTL[31:8] = 0x11011 //SDM增益默认值配置(推荐使用默认值)

      TX_SDM_CTL[1:0] = 0x3 //SDM使能

    • TX PWM控制寄存器

      TX_PWM_CTL[6:0] = 0x11 //PWM使能并配置为输出PWM调制信号

    • TX FIFO控制寄存器

      TXFIFO_CTL[2:0] = 0x3 //使能TXFIFO通道,下溢出时发送0