请问一下技术支持
我前一个帖子写了目前初始化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是一个意思?
Kailyn Chen:
mic1L/line1L并不是一个意思,而是说输入既可以是mic输入,也可以是line 输入,不需要进行配置,如果说mic和line同时输入,但是内部的多路选择只能处理一路的话,这种情况就需要进行配置,比如通过寄存器配置多路选择器选择的是mic还是line。
taoyu:
回复 Kailyn Chen:
谢谢指点,我还想问一下我现在设计的电路是两个独立的音源一个是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总线没有问题,前面修改采样率,从逻辑分析仪上看也是正确的。这就有点摸不着头脑了。
Kailyn Chen:
回复 taoyu:
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。
是不是寄存器没写进去?
taoyu:
回复 Kailyn Chen:
谢谢你!
这也是我比较困惑的地方,LINE1L和LINER都是0x78 ,也就是都没有连接到左右ADC上。但是我reset芯片 设置采样率都是可以的。我用的是stareware的库函数进行操作的,暂时没发现其他的问题,难道是读函数有问题我再确认一下?我在官网上找了一下,有3204 3206的操作说明和示例但是没有3106的。不知道有没有TLV320AIC3106 Application Reference Guide的pdf文档。
mark huang4:
楼主能不能贴下初始化时钟的代码,我这边配置时钟,只配置到MCLK,而BCLK配置始终没有变化,多谢了~ QQ:120654248 我们做视频跟踪,可以一起交流学习下。
taoyu:
回复 mark huang4:
我这里初始化的代码是这样的: 我的采样率设置的是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);
mark huang4:
回复 taoyu:
真是见鬼了,我照你的配BCLK还是没有变化。
taoyu:
回复 mark huang4:
你有没有复位芯片啊。我这边上电之后软件硬件都复位了一次。
mark huang4:
回复 taoyu:
当然啊,软硬件都是复位的,我跑海思项目的一个应用bclk有变化,然后我把那寄存器值读出来再复位全写进去,居然bclk依然没变化?太奇怪了。