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.

[参考译文] TMS320F28P550SJ:在运行时更改时钟速度

Guru**** 2511415 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime

器件型号:TMS320F28P550SJ


工具/软件:

尊敬的 champs:

我向我们的客户询问这个问题。

用户希望降低时钟速率、因为功耗较低。

用户要求指南这样做。

问题:

1.该 API 可以在运行时调用吗? 是否有任何问题或使用隐患? 这会更改 PLL、因此用户会担心使用它。

SysCtl_setclock (device_setclock_CFG);
2.该 API 可以在运行时调用吗? 是否有任何问题或使用隐患? 这不会改变 PLL。 对吗?
SysCtl_setPLLSysClk(uint16_t 分频器)
3.将时钟降低 SYSCLK/4 后、如果所有外设时钟保持并源自 SYSCLK。 它们不会受到影响、但输出也会更改/4。
也就是说、
新 EPWMCLK =原始 EPWMCLK/4
新 I2C 比特率=原始 I2C 比特率/4
新 SCI 波特率=原始 SCI 波特率/4
对吗?
4.如果用户想设置新的 SCI/I2C 速度=原始 SCI/I2C 波特率、则用户必须重新初始化 SCI 并 相应地更改下方红色的输入时钟。  
例如、

I2C_initController (myI2C0_BASE、 DEVICE_SYSCLK_FREQ、 myI2C0_bitrate、I2C_DUTYCYCLE_33 );

SCI_setConfig (mySCI0_BASE、 DEVICE_LSPCLK_FREQ、 mySCI0_BAUDRATE、 (SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE);

对吗?
5.如果用户只降低 SYSCLK ,用户是否需要更改闪存等待状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Wayne:

    请允许我明天回答这些问题、谢谢。

    此致、

    Aishwarya

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

    Wayne、

    您是否能够提供有关用户为何想要在运行时重新配置时钟的更多信息。 通常建议在开始时配置所需的所有时钟配置、并避免重新配置、因为这可能会影响外设和存储器执行。 有关上述问题的答案、请参阅以下内容:

    [报价 userid=“4952" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime

    1.该 API 可以在运行时调用吗? 是否有任何问题或使用隐患? 这会更改 PLL、因此用户会担心使用它。

    SysCtl_setclock (device_setclock_CFG);
    [/报价]

    不建议在运行时调用此函 数、因为外设正在积极使用这些时钟。 确保禁用模块、配置时钟并重新启用模块。

    [报价 userid=“4952" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime
    2.该 API 可以在运行时调用吗? 是否有任何问题或使用隐患? 这不会改变 PLL。 对吗?
    SysCtl_setPLLSysClk(uint16_t 分频器)
    [/报价]

    请参阅回答 1。  

    [报价 userid=“4952" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime
    3.将时钟降低 SYSCLK/4 后、如果所有外设时钟保持并源自 SYSCLK。 它们不会受到影响、但输出也会更改/4。
    也就是说、
    新 EPWMCLK =原始 EPWMCLK/4
    新 I2C 比特率=原始 I2C 比特率/4
    新 SCI 波特率=原始 SCI 波特率/4
    对吗?
    [/报价]

    在将寄存器重新写入到正确的值之前、外设不会自动获得更新的时钟信息。 如果在运行时更新 SYSCLK、则外设执行将会出现问题、因为外设寄存器和 SYSCTRL 寄存器将包含不一致的信息。  

    [报价 userid=“4952" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime
    4.如果用户想设置新的 SCI/I2C 速度=原始 SCI/I2C 波特率、则用户必须重新初始化 SCI 并 相应地更改下方红色的输入时钟。  
    例如、

    I2C_initController (myI2C0_BASE、 DEVICE_SYSCLK_FREQ、 myI2C0_bitrate、I2C_DUTYCYCLE_33 );

    SCI_setConfig (mySCI0_BASE、 DEVICE_LSPCLK_FREQ、 mySCI0_BAUDRATE、 (SCI_CONFIG_WLEN_8|SCI_CONFIG_STOP_ONE|SCI_CONFIG_PAR_NONE);

    对吗?
    [/报价]

    是的、这是正确的、因为旧值当前会加载到外设寄存器中。 建议在外设处于复位/时钟禁用状态时重新配置外设。  

    [quote userid=“4952" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1549193/tms320f28p550sj-changing-clock-speed-during-runtime 如果用户稍微降低 SYSCLK、是否需要更改闪存等待状态?

    建议始终根据器件频率 (SYSCLK) 配置闪存等待状态。 可以像降低 SYSCLK 一样保持不变、但在增加 SYSCLK 时肯定需要更新。  

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    我将离线讨论。