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.

[参考译文] MSPM0G3507:MCLK 开关原因

Guru**** 2398695 points
Other Parts Discussed in Thread: SYSCONFIG, MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1477310/mspm0g3507-mclk-switching-causes

器件型号:MSPM0G3507
主题中讨论的其他器件:SysConfig

工具与软件:

我在 FreeRTOS 中使用以下代码、 ti_msp_dl_config.c 文件中的以下代码。  

SysConfig_weak void SYSCFG_DL_SYSCTL_init (void)

  //低功耗模式配置为 SLEEP0
  DL_SYSCTL_setBORThreshold (DL_SYSCTL_BOR_THR_LEVEL_0);
  //DL_SYSCTL_setSYSOSCFreq (DL_SYSCTL_SYSOSC_FREQ_4M);
  DL_SYSCTL_configSYSPLL ((DL_SYSCTL_SYSPLLConfig *)&gSYSPLLConfig);
  DL_SYSCTL_setULPCLKDivider (DL_SYSCTL_ULPCLK_DIV_1);
  //DL_SYSCTL_setMCLKSource (SYSOSC、HSCLK、DL_SYSCTL_HSCLK_SOURCE_SYSPLL);
    
}
如果我取消 DL_SYSCTL_setMCLKSource 代码行的注释、我的一些 MCU 器件就会被锁定。 出现 I MENA 一些损坏、需要进入 BSL 模式才能恢复。
想知道这里会有什么问题吗?  请注意、我正在为 MCU 使用内部时钟。
此致、
Bhushan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Bhushan:

    我注意到、  根据 MSPM0G3507_TRM、您会注释"DL_SYSCTL_setSYSOSCFreq (DL_SYSCTL_SYSOSC_FREQ_4M)"、 、 MCLK 默认来自 SYSOSC、因此有必要在设置 MCLK 之前取消注释、以确保 SYSOSC 配置完成。

    此致、
    Peter

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

    您好、Peter、

    感谢您检查此查询。

    是的、不应对此行进行注释。  但我确信代码会出现问题、因为调试器停止响应并抛出消息

    "在断开连接之前未能从目标中删除调试状态。  程序存储器中可能仍嵌入了断点操作码。  建议您在连接和重新加载程序之前重置仿真器、然后再继续调试。"

    之后、我需要使 MCU 处于 BSL 模式、以使器件正常工作。 除非我注释 MCLK 更改代码、否则每次调试器将锁定且代码不会继续、  

    我修改后的代码现在可与以下行配合使用:

    SysConfig_weak void SYSCFG_DL_SYSCTL_init (void)


      //低功耗模式配置为 SLEEP0
      DL_SYSCTL_setBORThreshold (DL_SYSCTL_BOR_THR_LEVEL_0);
      DL_SYSCTL_setFlashWaitState (DL_SYSCTL_FLASH_WAIT_STATE_2);

      
      DL_SYSCTL_setSYSOSCFreq (DL_SYSCTL_SYSOSC_FREQ_BASE);
      DL_SYSCTL_configSYSPLL ((DL_SYSCTL_SYSPLLConfig *)&gSYSPLLConfig);
      DL_SYSCTL_setULPCLKDivider (DL_SYSCTL_ULPCLK_DIV_1);
      // DL_SYSCTL_setMCLKSource (SYSOSC、HSCLK、DL_SYSCTL_HSCLK_SOURCE_SYSPLL);
      DL_SYSCTL_setMCLKDivider (DL_SYSCTL_MCLK_DIVIDER_4);
    }
     由于 UART 时钟被调谐到38400波特率、因此此处需要 DL_SYSCTL_MCLK_DIVIDER_4。  
    现在、代码能够高效地运行、同时 ADC 和 UBM (UART 中断模式)正在正常运行。
    我目前不清楚为什么更改 MCLK 会导致问题。
    此致、
    Bhushan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  Bhushan:

    很抱歉耽误时间、 今天我不在办公室、 明天我会回复您。 谢谢。

    此致、
    Peter

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

    为了进一步解决此问题、我可能选择了无效的时钟路径。 我假设浅绿色的线是我的当前时钟路径。 而 MCLK 切换为黄线。   

    由于我使用内部振荡器(基于 SYSOSC)、因此不能选择 HFXT。  

    我会更新关于 MCLK2XVCO、USEHSCLK、HSCLKSEL 状态的更多信息、以便提供准确路径。  

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

    尊敬的  Bhushan:

    我很高兴您找到了问题的根源。 顺便说一下、设置时钟的一种更简单且推荐的方法是使用我们的 SysConfig 工具提供的时钟树、此外、您还可以使用 SysConfig 生成代码、快速比较您自己的代码并解决问题、希望它对您有所帮助。

    此致、
    Peter