用的创龙C6748例程控制AIC3106,无论怎么配置,LEFT_LOP/M和RIGHT_LOP/M输出完全一样,输出等于DAC_L和DAC_R的叠加。把所有的相关寄存器都试过一直没法分开。
怎么配置才能实现左右声道分开,左声道输出DAC_L,右声道输出DAC_R,谁以前成功分开左右声道,讲一下应该配置哪些寄存器?
下面是我的配置:
// 左右声道 DACs 上电
I2CRegWrite(baseAddr, AIC31_P0_REG37, 0xE0);
// 配置DAC的datapath
I2CRegWrite(baseAddr, AIC31_P0_REG7, 0x0A);
// 选择 DAC L1 R1 路径
I2CRegWrite(baseAddr, AIC31_P0_REG41, 0x50);
I2CRegWrite(baseAddr, AIC31_P0_REG42, 0x6C);
// LEFT_LOP/M 输出
I2CRegWrite(baseAddr, AIC31_P0_REG86, 0x09);
// RIGHT_LOP/M 输出
I2CRegWrite(baseAddr, AIC31_P0_REG93, 0x09);
// 设置 DAC 衰减
I2CRegWrite(baseAddr, AIC31_P0_REG43, dac_atten);
I2CRegWrite(baseAddr, AIC31_P0_REG44, dac_atten);
Amy Luo:
您好,
您输入的音频信号是通过I2S输入的吗,I2S传输的是左右声道的数据,如果音源数据是一样的或者立体声的,左右声道靠人耳听声音基本差不多。
user5922973:
回复 Amy Luo:
我用I2S给左声道500HZ正弦波,右声道5kHZ正弦波,输出结果在示波器上显示,左右声道输出轨迹完全重合,都是这两种正弦波的叠加。
关掉其中一个DAC,相应那一路的正弦信号就没了,比如关掉DAC_L,输出就是5k正弦波,但是左右声道都有输出并且完全一样。
user5922973:
有人有立体声配置寄存器的代码吗
Amy Luo:
回复 user5922973:
看数据手册16页框图,感觉不应该这样,读一下REG41的值看看有没有改变呢
user5922973:
回复 Amy Luo:
用I2CRegRead指令读reg40得到的值是给reg41设的值,应该是读指令不对,写操作控制输出音量是没问题的
Amy Luo:
回复 user5922973:
为什么用reg40的值设定reg41的值呢?是reg41控制左右DAC输出路径,读一下REG41的值是为了验证0x50是否写进去了
user5922973:
回复 Amy Luo:
我是说 I2CRegRead 这条指令可能有问题,直接用这条指令读寄存器的值都是 regAddr+1 的寄存器的值,实际上0x50是写成功的,DAC_L/R 1/2/3 path都可以控制
LIOU JB:
回复 user5922973:
user5922973:
您的这段话,真是惠我良多!感谢!
LIOU JB:
回复 LIOU JB:
以logical analysis来看才会真相:
写0 到reg 2
写0x20 到reg 3
但读出来要从reg 1开始:
才会读到你刚才写入的值