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.

[参考译文] CDCE925:I2C编程问题

Guru**** 2382480 points
Other Parts Discussed in Thread: CDCE925, CLOCKPRO
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/clock-timing-group/clock-and-timing/f/clock-timing-forum/1101422/cdce925-i2c-programming-question

部件号:CDCE925
主题中讨论的其他部件: CLOCKPRO

你好。

我能够从寄存器读取和写入数据,但我无法获得此寄存器来提供所需的PLL输出。

我使用16MHz Crystal,这是我用来获得32MHz输出的代码。  

我使用的变量为fout = 32MHz,Fvco = 64MHz,P=2 n''= 4*2^2 = 16 Q=16,R =0

while (data!=0x81){//继续读取ID寄存器,直到您读取正确的值

//  address =(CDCE925_SLAVE_ADDR<1)&(0b1111.111万);//read=1 write =0首先发送读写

 aTxBuffer[0]= 0x00>1|0b1000万;

//  aTxBuffer[1]= 0x04;

 uINT16_t大小= 1;

 HAL_I2C_Master_Transmit (&hi2c1,(uint16_t) CDCE925_Slaver_ADDR<1,(uint8_t*) aTxBuffer,大小,1万);

//  HAL_StatusTypeDef status = HAL_I2C_Master_Transmit (&hi2c1,(uint16_t) address,(uint8_t*) aTxBuffer,size,1万);

// 如果(状态!= HAL_OK){

// __NOP ();

// 

 地址=(CDCE925_SLAVE_ADDR<1)|(0b0.0001万);//读取

 //地址=(CDCE925_SLAVER_ADDR<1)&(0b1111.111万);

//  aTxBuffer[0]= 0x00;

//  aTxBuffer[1]=(CDCE925_slaver_ADDR<1)|(0b0.0001万);

 HAL_I2C_Master_receive (&hi2c1,(uint8_t)地址,(uint8_t*)和数据,110000);

 HAL_DELAY (1);

//  HAL_GPIO_TogglePin (LD2_GPIO端口,LD2_Pin);

 //输入从设备读取数据,然后将其放在该位置以摆脱循环

 }

 uINT8_t data2 = 0;

 uINT8_t data3 = 0;

 aTxBuffer[0]= 0x01;//偏移

 aTxBuffer[1]= 0b100万;//写入编号

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 Data2 = PLL_I2C_READ (aTxBuffer[0]);

 aTxBuffer[0]= 0x02;

 aTxBuffer[1]= 0b1011.01万;//设置为crystal

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 UINT8_t data1 = 0;

 while (data1!= 0b1011.01万){

 Data1 = PLL_I2C_READ (aTxBuffer[0]);

 }

 aTxBuffer[0]= 0x03;

 aTxBuffer[1]= 0b0.001万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 Data2 = PLL_I2C_READ (aTxBuffer[0]);

 aTxBuffer[0]= 0x04;

 aTxBuffer[1]= 0b1000万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x05;

 aTxBuffer[1]= 0b100万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 while (data1!= 0b100万){

 Data1 = PLL_I2C_READ (aTxBuffer[0]);

 }

 aTxBuffer[0]= 0x06;

 aTxBuffer[1]= 0b110.0001万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 Data2 = PLL_I2C_READ (aTxBuffer[0]);

 Data3 = PLL_I2C_READ (0x01);

 uINT8_t data13 =0;

 aTxBuffer[0]= 0x13;

 aTxBuffer[1]= 0b0万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 data13 = PLL_I2C_READ (0x13);

 aTxBuffer[0]= 0x14;

 aTxBuffer[1]= 0b100.1101万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 while (data1!= 0b100.1101万){

  Data1 = PLL_I2C_READ (0x14);

  }

 aTxBuffer[0]= 0x15;

 aTxBuffer[1]= 0b0万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x16;

 aTxBuffer[1]= 0b0.01万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x17;

 aTxBuffer[1]= 0b0.01万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x18;

 aTxBuffer[1]= 0b0万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x19;

 aTxBuffer[1]= 0b10万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x1A;

 aTxBuffer[1]= 0b0.001万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

 aTxBuffer[0]= 0x1B;

 aTxBuffer[1]= 0b0.1万;

 PLL_I2C_WRITE (aTxBuffer[0],aTxBuffer[1]);

 HAL_DELAY (10);

UINT8_t PLL_I2C_READ (uint8_t聚合){

UINT8_t地址;

UINT8_t数据;

UINT8_t aTxBuffer[4]={0};

aTxBuffer[0]=返回| 0b1000万;

地址=(CDCE925_SLAVE_ADDR<<1);

HAL_I2C_Master_Transmit (&hi2c1,(uint8_t)地址,(uint8_t*) aTxBuffer,110000);

地址=(CDCE925_SLAVE_ADDR<1)| 0x01;

HAL_I2C_Master_receive (&hi2c1,(uint8_t)地址,(uint8_t*)和数据,110000);

HAL_DELAY (1);

返回数据;

}

void PLL_I2C_WRITE (uint8_t regr,uint8_t数据){

UINT8_t地址;

UINT8_t aTxBuffer[2];

地址=(CDCE925_SLAVE_ADDR<<1);

aTxBuffer[0]=返回| 0b1000万;

//此处可能是错误命令

aTxBuffer[1]=数据;

HAL_I2C_Master_Transmit (&hi2c1,(uint8_t)地址,(uint8_t*) aTxBuffer,210000);

}

非常感谢您的帮助

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,

    由于您能够读写,因此问题可能出在寄存器设置中:

    引用我使用的变量fout = 32MHz,Fvco = 64MHz,P=2 n''= 4*2^2=16 Q=16[/R]

    fvco范围为80 MHz至230 MHz。

    例如,请将其增加到128MHz,M=1,N=8。 其中P=1,N'=16,Q=16,R=0和Pdiv=4。

    您可以使用ClockPro生成工作寄存器配置: https://www.ti.com/tool/CLOCKPRO

    此致,

    朱利安