This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

aic3106的初始化,请问技术支持。

Other Parts Discussed in Thread: TLV320AIC3106, REG102, REG101

       请问一下技术支持

       我前一个帖子写了目前初始化aic3106的步骤,没有人回复我这里再简化一点提问题。

www.deyisupport.com/.../352176.aspx

      我们的逻辑结构是这样的,接了2路单声道的mic信号到line1的左右通道,然后通过LOUT和ROUT输出。

      目前经过配置目前主时钟,位时钟,帧时钟都是正常的。但是DOUT和DIN没有数据。

      lin1配置的是19和22寄存器。

      LOUT ROUT配置的是82 86 92 93寄存器。

      我目前的疑问是,输入的两路信号都是mic接入的,我寄存器是否要配置成mic,但是数据手册里面没有mic1L和mic1R在哪里设置。还是mic1L/line1L是一个意思?

  • mic1L/line1L并不是一个意思,而是说输入既可以是mic输入,也可以是line 输入,不需要进行配置,如果说mic和line同时输入,但是内部的多路选择只能处理一路的话,这种情况就需要进行配置,比如通过寄存器配置多路选择器选择的是mic还是line。

  • 谢谢指点,我还想问一下我现在设计的电路是两个独立的音源一个是mic采集进来的,另外一个是电脑放音进入。这两路信号分别作为左右声道进入。按照你的意思我对line1和line2的配置是0x04.也就是直接使能就行了“

    1: Left ADC channel is powered up

    但是,我刚才重新读了reg19和reg22,返回的是0x78,

    1111: LINE1L is not connected to the left ADC PGA

    也就是line1L没有连接到left ADC。我确认我的IIC总线没有问题,前面修改采样率,从逻辑分析仪上看也是正确的。这就有点摸不着头脑了。

  • Reg22 的bit[6:3]=1111指的是LINE1R is not connected to the right ADC PGA,不是LINE1L。

    那你现在的意思就是LINE1R实际接的是mic输入,但是寄存器配置下来反而Reg22 为1111,因此需要核实一下是否需要配置mic或line input。

    但mic或line输入是不需要配置的。输入可以是line也可以是mic。

    是不是寄存器没写进去?

  • 谢谢你!

    这也是我比较困惑的地方,LINE1L和LINER都是0x78 ,也就是都没有连接到左右ADC上。但是我reset芯片 设置采样率都是可以的。我用的是stareware的库函数进行操作的,暂时没发现其他的问题,难道是读函数有问题我再确认一下?我在官网上找了一下,有3204 3206的操作说明和示例但是没有3106的。不知道有没有TLV320AIC3106 Application Reference Guide的pdf文档。

  • 楼主能不能贴下初始化时钟的代码,我这边配置时钟,只配置到MCLK,而BCLK配置始终没有变化,多谢了~    QQ:120654248  我们做视频跟踪,可以一起交流学习下。

  • 我这里初始化的代码是这样的: 我的采样率设置的是48KHz 工作模式是ADC和DAC都设置了。你对照看一下分频的那几个寄存器你设置的对不对

    unsigned char pllPval = 4u;
    unsigned char pllRval = 1u;
    unsigned char pllJval = 16u;
    unsigned short pllDval = 0u;

    // 采样率参数选择
    switch(sampleRate)
    {
    case 8000:
    fs = 0xAAu;
    break;

    case 11025:
    fs = 0x66u;
    ref = 0x8Au;
    pllJval = 14u;
    pllDval = 7000u;
    break;

    case 16000:
    fs = 0x44u;
    break;

    case 22050:
    fs = 0x22u;
    ref = 0x8Au;
    pllJval = 14u;
    pllDval = 7000u;
    break;

    case 24000:
    fs = 0x22u;
    break;

    case 32000:
    fs = 0x11u;
    break;

    case 44100:
    ref = 0x8Au;
    fs = 0x00u;
    pllJval = 14u;
    pllDval = 7000u;
    break;

    case 48000:
    fs = 0x00u;
    break;

    case 96000:
    ref = 0x6Au;
    fs = 0x00u;
    break;

    default:
    fs = 0x00u;
    break;
    }

    //mode = 0xFFu fs =0

    temp = (mode & fs);

    // 设置采样率
    I2CRegWrite(baseAddr, AIC31_P0_REG2, temp);

    I2CRegWrite(baseAddr, AIC31_P0_REG3, 0x80 | pllPval);

    // 使用 PLLCLK_IN 作为 MCLK
    I2CRegWrite(baseAddr, AIC31_P0_REG102, 0x08);

    // 使用 PLLDIV_OUT 作为 CODEC_CLKIN
    I2CRegBitClr(baseAddr, AIC31_P0_REG101, 0x01);

    // GPIO1 选择输出分频后的PLL IN
    I2CRegWrite(baseAddr, AIC31_P0_REG98, 0x20);

    temp = (pllJval << 2);
    I2CRegWrite(baseAddr, AIC31_P0_REG4, temp);

    // 初始化 PLL 分频寄存器
    I2CRegWrite(baseAddr, AIC31_P0_REG5, (pllDval >> 6) & 0xFF);
    I2CRegWrite(baseAddr, AIC31_P0_REG6, (pllDval & 0x3F) << 2);

    temp = pllRval;
    I2CRegWrite(baseAddr, AIC31_P0_REG11, temp);

    // 使能编解码器作为主机用于输出fs 和 bclk
    I2CRegWrite(baseAddr, AIC31_P0_REG8, 0xD0);

    I2CRegWrite(baseAddr, AIC31_P0_REG7, ref);

  • 真是见鬼了,我照你的配BCLK还是没有变化。

  • 你有没有复位芯片啊。我这边上电之后软件硬件都复位了一次。

  • 当然啊,软硬件都是复位的,我跑海思项目的一个应用bclk有变化,然后我把那寄存器值读出来再复位全写进去,居然bclk依然没变化?太奇怪了。