微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > aic3106的初始化,请问技术支持。

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

时间:10-02 整理:3721RD 点击:

       请问一下技术支持

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

http://www.deyisupport.com/question_answer/analog/audio/f/42/p/120920/352176.aspx#352176

      我们的逻辑结构是这样的,接了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依然没变化?太奇怪了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top