大家好!
本人现在在开发一款TI的芯片——PCM1865,想要实现声音使用麦克风播放功能。目前芯片还没有把功能调出来,通信正常,
寄存器读写正常,所遇到问题如下:
1、 资料只有pcm1865、PCM186xMixerCoefficientwithmacro两份资料。pcm1865是介绍芯片功能及寄存器表的,
PCM186xMixerCoefficientwithmacro为配置DSP功能Page 1 写入虚拟寄存器介绍。pcm1865手册最重要的就是让我们配置时钟,
但我们总感觉芯片有些地方没讲到,寄存器表不全,资料是不是不全?
2、 我们把模式配成从模式,时钟由外部发送过来,SCK为12.288M,BCK为3.072M,LRCK为48K,时钟没错,但就是没有数据出来。
3、 我们把Page 0 状态寄存器70到78每隔10秒读一次并打印出来,如下:
data70=0 、data71=10 、data72=af、 data73=3 、data74=32 、data75=0 、data78=7
4、 对照下寄存器表,发现时钟没错,状态也在运行状态。电压状态也没错。连接了音频,但用示波器量数据脚还是没波形。
5、 程序初始化如下。 写函数两个参数,第一个为发送寄存器地址,第二为数据。
void PCM186_Init(void)
{ uint8_t data05=0,data10=0,page1_data20=0xff,data60=0,Idata=0,data20=0; HDMI_WriteI2C_Byte(0x00,0xFE); //复位寄存器
Delay_ms(5); HDMI_WriteI2C_Byte(0x00,0x00); //select page0
Delay_ms(5);
HDMI_WriteI2C_Byte(0x70,0x00); // Power Up
Delay_ms(5); HDMI_WriteI2C_Byte(0x0b,0xcc); //
Delay_ms(5); HDMI_WriteI2C_Byte(0x20,0x40);
Delay_ms(5); HDMI_WriteI2C_Byte(0x21,0x00); // HDMI_WriteI2C_Byte(0x22,0x00); // HDMI_WriteI2C_Byte(0x23,0x00); // HDMI_WriteI2C_Byte(0x26,0x3f); //set master clock(sck) to bck divider value 64
HDMI_WriteI2C_Byte(0x27,0xff); //set master clock(sck) to bck divider value 127·
HDMI_WriteI2C_Byte(0x28,0x00); //
Delay_ms(5); HDMI_WriteI2C_Byte(0x19,0xff); //
Delay_ms(5); HDMI_WriteI2C_Byte(0x0a,0x08); //ch4(r) audio ADC
HDMI_WriteI2C_Byte(0x58,0x80); //Without latch HDMI_WriteI2C_Byte(0x60,0x01); //energysense interrupts HDMI_WriteI2C_Byte(0x62,0x12); //Width of the Interrupt Pulse 3ms
HDMI_WriteI2C_Byte(0x06,0x41); //ADC1L VINL1[SE] HDMI_WriteI2C_Byte(0x07,0x41); //ADC1R VINL1[SE] HDMI_WriteI2C_Byte(0x08,0x42); //ADC2L VINL2[SE] HDMI_WriteI2C_Byte(0x09,0x42); //ADC2R VINL2[SE] HDMI_WriteI2C_Byte(0x0F,0x3F); //PGA Channel 1 Life 7.5 dB
HDMI_WriteI2C_Byte(0x16,0x3F); //PGA Channel 1 Right
Delay_ms(5); HDMI_WriteI2C_Byte(0x71,0x10); /
HDMI_WriteI2C_Byte(0x70,0x00); //start run
HDMI_WriteI2C_Byte(0x60,0x11); // HDMI_WriteI2C_Byte(0x05,0x87); //set max 6dB attenuation and enable Clipping suppression
Delay_ms(5); HDMI_WriteI2C_Byte(0x01,0x08); //4.0 dB (Max) 0x50
HDMI_WriteI2C_Byte(0x02,0x08); //4.0 dB (Max) HDMI_WriteI2C_Byte(0x03,0x08); //4dB (Max) HDMI_WriteI2C_Byte(0x04,0x08); //4.0 dB (Max)
}
以上为初始化程序,按照这样写的话读寄存器芯片是运行状态,但数据口就是没数据出来。
我还比较纠结在从模式下PLL锁相环时钟是不是可以不要?,还有page 1 的虚拟寄存器是不是一定要写入?
请各位兄台解答下。
user6323524:
回复 Kailyn Chen:
您好!谢谢您的帮助。从模式不用配PLL 时钟,那Page 1 的虚拟寄存器需要写入值吗?
现在硬件方面各个引脚电压没发现问题,但还在检查当中。时钟由外部发送过来,MSCK为12.288MHZ,BCK为3.072MHZ,LRCK为48KHZ ,
软件方面我主要做了:
1、复位寄存器
2、写0x00到寄存器0x70,开始Power Up,
3、写0xCC到寄存器0x0B,设置音频接口为I2S模式,采用32位采样位宽,LRCK为MCLK的256分之一
4、写0x40到寄存器0x20,设置从模式,设置为MCLK为时钟源,使能自动检测。
5、写0x41/0x42到寄存器0x06/0x07/0x08/0x09,配置为单端输入,通道1和通道2我都试过。写了以上寄存器后,得以下现象
读状态寄存器 0x72为0xaf,说明芯片当前状态已在运行状态了,
读状态寄存器 0x75为0x00,说明芯片当前时钟NoError,
读状态寄存器 0x78为0x07,说明电压DVDD Status、AVDD Status、Digital LDO Status的电压都为Good.但芯片数据输出引脚Pin 18Audio data digital output就是没有数据出来,用示波器量也没有波形。
也写过别的寄存器,还是不行。
请问我软件方面还有漏缺的吗?或者有初始化的参照代码吗
user6323524:
大家好!
本人现在在开发一款TI的芯片——PCM1865,想要实现声音使用麦克风播放功能。目前芯片还没有把功能调出来。
通信正常,寄存器读写正常,检查硬件方面的没有发现问题 对照EVM user's guide中的原理图检查下硬件个引脚电压,PIN13:DVDD=3.3v,PIN8:AVDD=3.3v,PIN11:LDO=1.8v.没有错误。
本人配为从模式,因此不用配PLL 时钟,那Page 1 的虚拟寄存器需要写入值吗? 时钟由外部发送过来,MSCK为12.288MHZ接 PIN15, BCK为3.072MHZ接PIN17, LRCK为48KHZ接PIN16 ,软件方面我主要做了:1、复位寄存器2、写0x00到寄存器0x70,开始Power Up,3、写0xCC到寄存器0x0B, 设置音频接口为I2S模式,采用32位采样位宽,LRCK为MCLK的256分之一4、写0x40到寄存器0x20, 设置从模式,设置为MCLK为时钟源,使能自动检测。5、写0x41/0x42到寄存器0x06/0x07/0x08/0x09,配置为单端输入,通道1和通道2我都试过。
写了以上寄存器后,得以下现象读状态寄存器 0x72为0xaf,说明芯片当前状态已在运行状态了,读状态寄存器 0x75为0x00,说明芯片当前时钟No Error,读状态寄存器 0x78为0x07,说明电压DVDD Status、AVDD Status、Digital LDO Status的电压都为Good.但芯片数据输出引脚Pin 18 Audio data digital output 就是没有数据出来,用示波器量也没有波形。也写过别的寄存器,还是不行。请问我软件方面还有漏缺的吗?或者有初始化的参照代码吗
本人邮箱为1764462515@qq.com ,从事影视行业开发工作,有时会接触到TI方面的芯片,遇到不懂之处会在论坛上提出来,望各位兄台多多帮助,谢谢。
Kailyn Chen:
回复 user6323524:
您好,读一下寄存器R112,看芯片是否处于sleep状态,导致没有输出?
user6323524:
回复 Kailyn Chen:
您好,读寄存器R112结果为0,芯片处于run状态 。
user6323524:
回复 Kailyn Chen:
请问我还能从哪方面切入找原因吗呢?
user6323524:
回复 Kailyn Chen:
您好!读寄存器R112结果为0,芯片处于run状态 。我还能从哪方面找问题呢