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.
Hi: 你好, 我在使用PCM1865,我将其设置为slave模式有data输入,但是我设置成master就没有输入了。我想知道如果将其设置为slave模式下,register的典型配置是什么? 可以给出来吗?谢谢
你好,
如果是换成slave那就很简单了,设置page 0 register 32,然后给ADC正确的时钟即可。
入股你没有输出的话,先检查一下你给的时钟是不是对的。
uint8 write_codec_register(uint8 node , uint8 reg , uint8 val , uint8 desired_length);这个是函数原型,我们一个I2S上接了两个设备,想使用TDM模式。
以下是我们的寄存器的设置,由于我们是在开发阶段,所以将一个设备设置为power down模式。另一个设置正常模式,函数原型设置过程如下:
你好:
你这个代码确实是设置ADC为slave,slave模式下工作应该比较简单。
1.请先检查和确认I2C读写PCM1865正确
2.reset后延时一段时间后再接着写后面的数据
3.你进入了power down模式,可先打开,power dwon后不是所有的ADC都工作。同时再检查一下ADC通道的选择是否正确。
4.请确认一下BCK,LRCK的时钟大小并贴出来。
你好,
我们用的BCK=2.4M,LRCK=48K。
请问用I2C写PCM1865寄存器的格式是不是(NODE_ADDR+W)+REG_ADDR+VALUE ?
还有,用I2C读PCM1865寄存器的格式是什么样的呢?
你好,
I2C读写的格式是标准协议,你按I2C标准协议读写即可。我的意思是你先查一下你I2C通信正常没,写进去一个数,读出来看是不是写成功了。
然后你们是TDM模式的话,还要设置page 0 register 11和12。当然你也可以先用I2S格式接一个调通,I2S格式也要设置 register 11。时钟的话,BCK要满足基本的关系:BCK>=2*length*LRCK,所以要根据你的时钟,位数设置成16bit或者24bit都行。
你好:
很抱歉PCM1865EVM的软件,内置的没有demo 代码,还是得自己配。这个配置应该不复杂,我还是建议,先用一片PCM1865,配置I2S得到输出,在实现其他功能。
一片ADC,先I2C读写正确,然后在配置设为slave器件,I2S的时钟信号都正确的话,就会有输出。或者你可以先用硬件模式确认一下,看电路是否有问题。
你好:
硬件电路没有问题。
再次确认一下时钟:
你是MCLK和I2S的时钟都是外部供给,然后MCLK=10M, BCLK=2.4M,WCLK=48K ?
如果都是外部供给,建议MCLK=12.288MHZ,其余的I2S 时钟都是对的。
然后regsiter 32的值设为0x04,register 115和116是多少都没有关系了,因为这个时候ADC是接收时钟,不需要配置这些分频系数。
其余的就是通道设置了,通道设置一下即可。
你好,
请问把register32设置为0x04是实现什么功能?
我把register32设置为0x04后,还是没有Data信号,然后我又把register设置为0x01,同样是没有Data信号。
还有,把register32设置为0x04后,相关的PLL寄存器是不是也要配置?
我们现在提供的MCLK=12M,BCLK=2.4M,WCLK=48K。
ADC通道配置如下:
write_codec_register( 0x94 , 6 , 0x10 , 3); //select ADC channel
Init_Iic_Transmit();
while(!Iic0_Data.tx_state);
write_codec_register( 0x94 , 7 , 0x10 , 3);
Init_Iic_Transmit();
while(!Iic0_Data.tx_state);
write_codec_register( 0x94 , 8 , 0x00 , 3);
Init_Iic_Transmit();
while(!Iic0_Data.tx_state);
write_codec_register( 0x94 , 9 , 0x00 , 3);
Init_Iic_Transmit();
while(!Iic0_Data.tx_state);