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.

[参考译文] TMS320F28388D:在 DCC 触发后修改时钟设置、但 PLL 无法锁定

Guru**** 2611385 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1576500/tms320f28388d-modify-the-clock-setting-after-the-dcc-triggered-but-the-pll-could-not-lock

器件型号:TMS320F28388D


工具/软件:

您好、

我的系统最初使用 25MHz 外部时钟、并且 PLL 配置为生成 200MHz PLLSYSCLK。

现在、当我切断外部时钟时、DCC 检测到时钟故障、然后系统会将时钟源切换到 INTOSC1 并重新配置 PLL、以使 PLLSYSCLK 保持在 200MHz。

但是,当我调用SysCtl_setClock()更新时钟设置时,函数返回false。 检查 sysctl_setclock() 后、我发现它在等待 PLL 锁定时超时、并且在SysCtl_isPLLValid()检查过程中出现故障。


检测到时钟故障后更新时钟设置的过程如下:

  1. 将振荡器源配置为 INTOSC1
  2. 周期的单个 OSCCLK 周期
  3. 关闭 PLL
  4. PLL 断电后需要至少 66 个 OSCCLK 周期的延迟
  5. 重置 MCD
  6. 调用 SysCtl_setClock (DEVICE_setclock_INTOSC)

 DEVICE_setclock_INTOSC 的定义:

#define DEVICE_SETCLOCK_INTOSC (SYSCTL_OSCSRC_OSC1 | SYSCTL_IMULT(80) | \
SYSCTL_REFDIV(2) | SYSCTL_ODIV(2) | \
SYSCTL_SYSDIV(1) | SYSCTL_PLL_ENABLE | SYSCTL_DCC_BASE_1 )

是否缺少任何会导致 PLL 锁定超时和 PLL 有效失败的程序?

以下是检测到时钟故障后的代码:

//
    // Wait till the ISR is hit on clock failure
    //
    while(isr_enter != 0x1U);

    //
    // Configure oscillator source to INTOSC1
    //
    SysCtl_selectOscSource(SYSCTL_OSCSRC_OSC1);

    //
    // Delay of at least 60 OSCCLK cycles
    //
    SysCtl_delay(11U);

    //
    // Turn off PLL
    //

    EALLOW;
    HWREGH(CLKCFG_BASE + SYSCTL_O_SYSPLLCTL1) &=
        ~SYSCTL_SYSPLLCTL1_PLLEN;
    EDIS;

    //
    // Delay of at least 66 OSCCLK cycles required post
    // powerdown of PLL
    //
    SysCtl_delay(12U);

    //
    // Set up PLL control and clock dividers
    //
    SysCtl_resetMCD();

    SysCtl_setClockTest(DEVICE_SETCLOCK_INTOSC);

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

    尊敬的 Nai Wen:

    让我明天再回到您的身边。

    此致、

    Aishwarya

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

    谢谢!!!

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

    尊敬的 Aishwarya:

    有什么好消息吗?

    此致、
    Norman

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

    Nai Wen、

    对延迟深表歉意。  要在第 29 行之后设置 PLL、您需要遵循 sysctl_setClock () 函数中处理的以下序列:

    ...

    如果将第 34 行和第 36 行注释掉、行为是否相同? 假设您仅使用 DCC、并且禁用了 MCD、sysctl_resetMCD () 将启用 MCD 逻辑。  

    此致、

    Aishwarya