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.

[参考译文] TMS570LC4357:tms570lc43xx 校验 PLL1Slip()

Guru**** 2463330 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1076859/tms570lc4357-tms570lc43xx-checkpll1slip

部件号:TMS570LC4357
“线程:HALCOGEN”中讨论的其它部件

王工您好:

    我用tms570lc43xx芯片,在调用checkPLL1Slip函数后,时钟就不对了。请问有没有什么思路帮忙解决一下此问题。

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

    您好,明溪

    HALCoGen 不会为 LC43x 设备生成此函数。 您是否改为使用 TMS570LSx 器件的 checkPLL1Slip()函数?   

    此功能将有意产生 PLL1打滑。 PLL1打滑后,时钟源被切合晶体时钟。 但此功能会在末尾恢复 PLL1  

    [引用 userid="507609" url="~/support/icls/arm-based 微处理器-组/基于 ARM 的微控制器/f/arm-based 微控制器- forum/1076859/tms570lc4357-tms570lc43xx-checkpll1slitts"]时钟就不对了

    您可以使用 ECLK 检查内部 PLL 时钟,VCLK 等。系统时钟是否变为 OSC 时钟?

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

    王工,我增加一个延时就好了(绿色标注的),请问这是为什么啊。

    /*恢复 PLL 乘数值*/
    systemREG1->PLLCTL1 ^= 0x8000U;

    /*启用 PLL1 */
    systemREG1->CSDISCLR = 0x2U;

    /*等待 PLL1启用*/
    /*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
    While (((systemREG1->CSDIS 和0x2U)!= 0U)

    }/*等待*/

    /*lmx add*/
    Delay_us (2000年);
    /***** /

    /*切换回初始时钟源*/
    systemREG1->GHVSRC = ghvsrc_bk;

    /*清除 PLL 滑动标志*/
    systemREG1->GLBSTAT = 0x300U;

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

    由于需要 while ()来检查状态,因此不需要延迟。 您是否在末尾恢复了 PLL 乘数?

    systemREG1->PLLCTL1 = pllctl1_bk;

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

    王工,我的代码如下。我将时钟源由PLL1转到oscillator ,然后再恢复回来。如果不加delay ć_us,时钟就恢复不到之前的状态了。ć

    UINT32 ghvsrc_bk,pllctl1_bk;

    /*备份寄存器 GHGVSRC 和 PLLCTRL1 */
    gvsrc_bk = systemREG1->gvsrc;
    pllctl1_bk = systemREG1->PLLCTL1;

    /*将所有时钟域切换到振荡器*/
    systemREG1->GHRSRC = 0x000000000000U;

    /*禁用 PLL1 */
    systemREG1->CSDISSET = 0x2U;

    /*等待 PLL1被禁用*/
    /*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
    While (((systemREG1->CSDIS 和0x2U)==0U)

    }/*等待*/

    /*启用 PLL1 */
    systemREG1->CSDISCLR = 0x2U;

    /*等待 PLL1启用*/
    /*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
    While (((systemREG1->CSDIS 和0x2U)!= 0U)

    }/*等待*/

    /*lmx add*/
    Delay_us (2000年);
    /***** /

    /*切换回初始时钟源*/
    systemREG1->GHVSRC = ghvsrc_bk;

    /*清除 PLL 滑动标志*/
    systemREG1->GLBSTAT = 0x300U;

    /*清除 ESM 标记*/
    esmREG->SR1[0U]= 0x400U;

    /*恢复 PLLCTL1寄存器*/
    systemREG1->PLLCTL1 = pllctl1_bk;

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

    您好,明溪

    启用 PLL 之前,您能否清除 PLL 滑动标志,然后重试?

    在禁用 PLL 后,CSVSTA 寄存器中的有效位(PLL,位1)未重置,清除 PLL 滑动标志将解锁并清除 CSVSTA 寄存器中的有效爬虫程序。

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

    王工按照您说的, 在启用 PLL。但是还是不行。之前,请清除 PLL 滑动标志

    检查无效 PLL1Slip (无效)

    UINT32 ghvsrc_bk,pllctl1_bk;

    /*备份寄存器 GHGVSRC 和 PLLCTRL1 */
    gvsrc_bk = systemREG1->gvsrc;
    pllctl1_bk = systemREG1->PLLCTL1;

    /*将所有时钟域切换到振荡器*/
    systemREG1->GHRSRC = 0x000000000000U;

    /*禁用 PLL1 */
    systemREG1->CSDISSET = 0x2U;

    /*等待 PLL1被禁用*/
    /*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
    While (((systemREG1->CSDIS 和0x2U)==0U)

    }/*等待*/

    /*恢复 PLL 乘数值*/
    //systemREG1->PLLCTL1 ^= 0x8000U;

    /*清除 PLL 滑动标志*/
    systemREG1->GLBSTAT = 0x300U;

    /*启用 PLL1 */
    systemREG1->CSDISCLR = 0x2U;

    /*等待 PLL1启用*/
    /*SAFETYMCUSW 28 D MR:NA <批准>“Hardware status bit read check (硬件状态位读取检查)”*/
    While (((systemREG1->CSDIS 和0x2U)!= 0U)

    }/*等待*/

    /*lmx add*/
    //delay_us(2000);
    /***** /

    /*切换回初始时钟源*/
    systemREG1->GHVSRC = ghvsrc_bk;

    /*清除 PLL 滑动标志*/
    //systemREG1->GLBSTAT = 0x300U;

    /*清除 ESM 标记*/
    esmREG->SR1[0U]= 0x400U;

    /*恢复 PLLCTL1寄存器*/
    systemREG1->PLLCTL1 = pllctl1_bk;
    }
    }

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

    您好,明溪

    我想再检查一下。  调用 systemREG1->PLLCTL1 ^= 0x8000U 后,是否会获得 PLL 打滑?

    systemREG1->GLBSTAT 在 systemREG1->PLLCTL1 ^= 0x8000U 后的值是什么?

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

    王工

        我把PLL slip注释掉了,也就是我没让pll产生slip。我就是先让pll转到oscillator,然后再恢复pll。但是没有恢复成功。

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

    您好,明溪

    您可以通过将 OSC 短路到 GND 来手动生成 PLL 打滑,然后使用方法恢复 PLL。