“线程: 测试”中讨论的其它部件
您好,
我可以使用哪个 LMK05028寄存器进行 动态时钟校正。
请告诉我们 动态时钟校正所使用的计算步骤。
此致
安吉
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.
您好,
我可以使用哪个 LMK05028寄存器进行 动态时钟校正。
请告诉我们 动态时钟校正所使用的计算步骤。
此致
安吉
安吉您好,
1.数据表中的第9.4.4.1节显示了从 ppb 计算步长的公式。
2.是用于调整时钟,DPLLy_FDEV 会设置步长,DPLLy_FDEV_REG_UPDATE 会根据数字递增或递减步长。 另请注意,DPLLy_FDEV_EN 必须为高,才能启用 DCO 模式,必须将 DPLLy_DCO_SEL_REF_TCXOB 设置为在 TCXO DCO 模式和 REF DCO 模式之间选择。
3. DCO 模式可以使用 GPIO 引脚操作,但我建议使用寄存器方法。 寄存器方法只需要设置上面第2号中所述的4个控件。
4.集成电路 Pro GUI 具有用户友好界面,可用于更好地了解 DCO 的工作原理。
基本上,要执行频率调整,顺序如下:
1.通过设置 DPLLy_FDEV_EN HIGH 启用 DPLLy 的 DCO 功能。
2.通过设置 DPLLy_DCO_SEL_REF_TCXOB,选择 DCO 调整是否需要为 TCXO 模式或 REF 模式。
3.将所需的步长写入 DPLLy_FDEV 寄存器。
4.将 DPLLy_FDEV_REG_UPDATE 设置为低增量,设置为高减。
此致,
起亚·拉赫巴尔
根据上述程序,我实施了 C 函数。 尝试测试,但无法正常工作。 请检查以下代码片段。 如果我漏了任何东西,请告诉我。
int lmk_clock_control(int64_t ppb)/*ppb 值将来自 ptp4l */
{
int64_t 步进值= 0;
UINT64_t DENref = 1099511627776;
UINT64_t fin = 390625000;
UINT64_t fVCO = 5156250000;
INT Rin = 1,P1_PLL = 4,PR_ref = 4;
UINT8_t data1,data2,data3,data3,data4,data5;
/*计算步长*/
梯级=(ppb/1000000000)* DENref /(fin/Rin)* fVCO /(p1_PLL*PR_ref);
//字节提取
Data1=((uint8_t)(step val & 0x0000000000ff);
Data2=((uint8_t)((step _val & 0x00000000ff00">8));
Data3=((uint8_t)((step val & 0x000000ff0000)>16));
Data4=(uint8_t)((step val & 0x0000ff000000)>24));
Data5=(uint8_t)((step val & 0x00ff0000">32));
/*为 DPLL1和 DPPL2启用 DCO 功能*/
/*选择 DCO 调整模式 TCXO-DPLL->0h,REF-DPLL->1h */
IF (i2c_write(&lmk,0x0244,0x5,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0244);
返回-1;
}
IF (i2c_write(&lmk,0x0245,0x5,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0245);
返回-1;
}
/*将 step 值写入 DPLL1_FDEV 寄存器*/
如果(i2c_write(&lmk,0x024A,data1,0)<0)则为{0}
printf("I2C 写入错误:地址%x\n", 0x024A);
返回-1;
}
IF (i2c_write(&lmk,0x0249,data2,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0249);
返回-1;
}
IF (i2c_write(&lmk,0x0248,data3,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0248);
返回-1;
}
IF (i2c_write(&lmk,0x0247,data4,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0247);
返回-1;
}
IF (i2c_write(&lmk,0x0246,data5,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0246);
返回-1;
}
/*写入 DPL1更新寄存器*/
如果(i2c_write(&lmk,0x024B,0x0,0)<0){
printf("I2C 写入错误:地址%x\n", 0x024B);
返回-1;
}
/*将 step 值写入 DPL2_FDEV 寄存器*/
IF (i2c_write(&lmk,0x0250,data1,0)<0){
printf("I2C 写入错误:地址%x\n", 0x0250);
返回-1;
}
IF (i2c_write(&lmk,0x024F,data2,0)<0){
printf("I2C 写入错误:地址%x\n", 0x024F);
返回-1;
}
IF (i2c_write(&lmk,0x024E,data3,0)<0){
printf("I2C 写入错误:地址%x\n", 0x024E);
返回-1;
}
IF (i2c_write(&lmk,0x024D,data4,0)<0){
printf("I2C 写入错误:地址%x\n", 0x024D);
返回-1;
}
IF (i2c_write(&lmk,0x024C,data5,0)<0){
printf("I2C 写入错误:地址%x\n", 0x024C);
返回-1;
}
/*写入 DPLL2更新寄存器*/
IF (i2c_write(&lmk,0x0251,0x0)<0){
printf("I2C 写入错误:地址%x\n", 0x024B);
返回-1;
}
}
/*用于测试目的的呼叫示例*/
lm_clock_control (5678227331);
lm_clock_control (10000000000);
lm_clock_control (5678228331);
lm_clock_control (10000090000);
此致
安吉
嗨,起亚·拉巴尔,
我对集成电路专业版和时钟调整有疑问。
1.集成电路 pro 软件的目标 ppb 是否与 ptp4l ppb 相同?
2.我正在从 ptp4l 接收 ppb 值2149,使用该值计算得出的 DPLLy_FDEV 值为 152,291,034。 如果我写了这个值,PTP 因为高偏移校正而断开连接。我在这里做了什么错?
3.实际上,我们将从 ptp4l 接收正负 ppb 值,但 TIC Pro 软件不会将 ppb (目标 ppb 框)值接受为负。为什么?
请帮我了解这个 ppb。
此致
安吉
安吉您好,
1.目标 ppb 是要对输出时钟信号进行的 ppb 调整。 例如,编写一个10 ppb 目标,然后按下增量按钮,将导致 APLL 分子增加10 ppb,因此输出时钟也将增加10 ppb。
2.当 ptp4l 返回 ppb 偏移量时,您将是目标频率的许多 ppb 偏移量。 因此,使用该 ppb 偏移量计算 DPLLy_FDEV,然后根据您所处的 ppb 偏移量方向进行增量或递减。 请确保您正朝着正确的方向进行调整。
3.要进行负调整,您必须按下递减按钮。 ppb 值将始终作为正数输入,然后增量和递减按钮确定是将 ppb 减去还是添加到 APLL 分子中以完成调整。
另请记住 ,DPLLy_FDEV_REG_UPDATE 控件确定是递增还是递减。
此致,
起亚·拉赫巴尔
嗨,起亚·拉巴尔,
我按照文档中提到的程序和您的建议进行了更正,试图进行测试,但由于 FDEV 值较高而未进行更正。 请您查看随附的代码一次。 请告诉我您的意见。
此致
安吉
安吉您好,
不幸的 是,我无法支持有关非我们的 TIC Pro 软件的软件的技术问题。 我的建议是联系 SMARTModular (第三方编程机构)以帮助您的设备编程,或者使用 TIC Pro 软件 https://www.ti.com/tool/TICSPRO-SW 对设备进行编程。
此致,
起亚·拉赫巴尔