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.

[参考译文] RM57L843:PLL1跳周测试问题

Guru**** 2528170 points
Other Parts Discussed in Thread: HALCOGEN, RM57L843

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260097/rm57l843-pll1-slip-test-problem

器件型号:RM57L843
主题中讨论的其他器件:HALCOGEN

大家好、团队成员。

根据安全手册(SPNU575A)、我采用了 PLL1转差检测器(CLK2)。

我复制了 demo_app (..\SafeTI Diagnostic Library\2.4.0\demo_app\common\source\faultInject.c)中 TI 样例代码的 checkPLL1Slip () checkPLL2Slip ()。

然而,系统会在 checkPLL1Slip()中停止。

 

CheckPLL2Slip()没有问题。

这是我的 setupPLL()代码。

void setupPLL(void)
{

/* USER CODE BEGIN (3) */
/* USER CODE END */

    /* Disable PLL1 and PLL2 */
    systemREG1->CSDISSET = 0x00000002U | 0x00000040U;
    /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */
    while((systemREG1->CSDIS & 0x42U) != 0x42U)
    {
    /* Wait */
    }

    /* Clear Global Status Register */
    systemREG1->GBLSTAT = 0x301U;

    /** - Configure PLL control registers */
    /** @b Initialize @b Pll1: */

    /**   - Setup pll control register 1:
    *     - Setup reset on oscillator slip
    *     - Setup bypass on pll slip
    *     - setup Pll output clock divider to max before Lock
    *     - Setup reset on oscillator fail
    *     - Setup reference clock divider
    *     - Setup Pll multiplier
    */
    systemREG1->PLLCTL1 =  (uint32)0x00000000U
                        |  (uint32)0x20000000U
                        |  (uint32)((uint32)0x1FU << 24U)
                        |  (uint32)0x00000000U
                        |  (uint32)((uint32)(8U - 1U)<< 16U)
                        |  (uint32)(0xA400U);

    /**   - Setup pll control register 2
    *     - Setup spreading rate
    *     - Setup bandwidth adjustment
    *     - Setup internal Pll output divider
    *     - Setup spreading amount
    */
    systemREG1->PLLCTL2 =  (uint32)((uint32)255U << 22U)
                        |  (uint32)((uint32)7U << 12U)
                        |  (uint32)((uint32)(1U - 1U) << 9U)
                        |  (uint32)61U;

    /** @b Initialize @b Pll2: */

    /**   - Setup pll2 control register :
    *     - setup Pll output clock divider to max before Lock
    *     - Setup reference clock divider
    *     - Setup internal Pll output divider
    *     - Setup Pll multiplier
    */
    systemREG2->PLLCTL3 = (uint32)((uint32)(1U - 1U) << 29U)
                        | (uint32)((uint32)0x1FU << 24U)
                        | (uint32)((uint32)(8U - 1U)<< 16U)
                        | (uint32)(0xA400U);

    /** - Enable PLL(s) to start up or Lock */
    systemREG1->CSDIS = 0x00000000U
                      | 0x00000000U
                      | 0x00000008U
                      | 0x00000080U
                      | 0x00000000U
                      | 0x00000000U
                      | 0x00000000U
                      | 0x00000004U;
}

我的 电路板是定制电路板。 (非评估板)

下面是 Halcogen 中的 PLL 设置。

  

请让我知道哪里错了。

祝你一切

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

    尊敬的 Gene:

    您是否可以附加整个项目?

    如果可能、我可以轻松地调试问题、否则我必须在结束时重新创建工程。

    --

    谢谢。此致、
    Jagadish。

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

    你好、Jagadish。  

    请理解、出于安全原因、我无法分享整个项目。

    然而,分析所需的一些内容有可能在有限的基础上分享。

     

    此致。

    基因

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

    尊敬的 Jewook:

    刚才、我测试了"checkPLL1Slip"代码、但我没有看到任何问题、而代码成功地执行了函数"checkPLL1Slip"。

    我将在此处附上代码、请查看。

    e2e.ti.com/.../PLL1_5F00_Slip_5F00_Detection_5F00_TEST_5F00_RM57.zip

    --

    谢谢。此致、
    Jagadish。

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

    大家好。 Jagadish。

    感谢您的答复。

    我发现了问题。

    我根据"SafeTI Diagnostic Library\2.4.0\demo_app\HALCoGen\RM57L843_Noos"中的示例实现了安全手册。

    我想示例代码中有一个问题。

    示例中 hl_sys_startup.c 上的 postSTC()

     

    ESM_ApplicationCallback ()示例

     示例中 sl_esm.c 上的 esmGroup1Handler()

    Check PLL1Slip() on faultInject.c 示例

    我的 问题是下面。 (执行序列)

    1. ESM_ApplicationCallback()执行。 (①)

    2. checkPLL1Slip()执行。 ( ②)

    3. systemREG1->PLLCTL1 ^= 0x8000U; on checkPLL1Slip()。  ( ⑤)

    4.那么、我预计会生成 ESM PLL1滑动错误信号。  

      但是、PLL1滑动错误信号的生成是 在  执行"if ((esmREG->SR1[0U]& 0x400U)!= 0x400U)"之后。 ( ⑥)

      因此、PLL1恢复代码未被执行。

      在  执行"if ((esmREG->SR1[0U]& 0x400U)!= 0x400U)"后、 最近会生成 ESM PLL1滑动错误信号。 ( ③,④)

    ------------------

    我认为这个问题可能只是定制板的问题。  

    请查看本期。

     

    此致。

    基因。