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.

[参考译文] MSPM0L1228:当电源策略从 Stop2更改为 RunSleep0时、SYSOSC 不启用

Guru**** 1832870 points
Other Parts Discussed in Thread: MSPM0L2228, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1380315/mspm0l1228-sysosc-does-not-enable-when-power-policy-change-from-stop2-to-runsleep0

器件型号:MSPM0L1228
主题中讨论的其他器件:MSPM0L2228SysConfig

工具与软件:

您好!

我有2个问题。

1)

我将使用 TI 示例(SYSCTL_POWER_POLICY_SLEEP_TO_STOP)将 RunSleep0更改为 Stop2、反之亦然。

但是、将电源策略从 Stop2更改为 RunSleep0后、无法启用 SYSOSC。 ( DL_SYSCTL_getPowerPolicyRUNSLEEP ()的返回值是 RunSleep3)

我还测试了 Stop0/1→RunSleep0、Standby0/1→RunSleep0、所有这些都是正常的。 ( DL_SYSCTL_getPowerPolicyRUNSLEEP ()的返回值是 RunSleep0)

根据「MSPM0 L 系列32MHz 微控制器的」规格、 SYSCTL 将自动重新启用 SYSOSC 并将 MCLK 切换回 SYSOSC。
 
 
我的代码有什么问题吗? 或者、当从 Stop2更改为 RunSleep0时、我需要设置什么吗?
我已附上代码(.c 和.syscfg)来重现问题。
2)
Stop0/1/2或待机0/1模式是 ARM 中的深度睡眠模式。 但是、SysTick 在这两种模式下仍正常运行。  我是否需要手动停止?
谢谢!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    1.我们将进行一次测试,谢谢。 一个问题:如何判断 SYSOSC 是禁用还是启用?

    在 STOP 和 STANDBY 模式下、SysTick 不可用。

    此致、

    Zoey

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

    您好!

    1) 1)我刚刚 通过检查    SOCLOCK.SYSOSCCFG 中是否设置了 DISABLESTOP 进行了快速测试

    2)  

    > SysTick 在 STOP 和 STANDBY 模式下不可用。

    我 也这么认为。  但实际上确实如此。

    我的问题是、我是否必须手动停止 SysTick、或者 MCU 是否会在进入 STOP/STANDBY 模式(通过设置某个参数)时自动停止它?

    您可以使用我的示例重现该示例。

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

    对于问题2:MCU 将在其进入低功耗模式时自动停止。

    此致、

    Zoey

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

    您能否使用上面随附的代码示例在进入 STOP/STANDBY 模式时检查 SysTick 是否确实停止?

    我的环境如下:

    - mspm0l2228 launchpad 开发套件

    XDS110 USB 调试探针

    - CCS Composer Studio Theia

    - SysConfig (我无法附加*。sysconf 文件,所以我添加了".c"到文件扩展名)

    e2e.ti.com/.../sysctl_5F00_power_5F00_policy_5F00_sleep_5F00_to_5F00_standby.syscfg.c

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

    您好!

    我还附上了 我的 第2 个问题的测试结果(SysTick)。

    这是在 Stop2模式中

    和待机1模式

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

    您好!

    很抱歉、这周我很忙。 我下周会有一个考试。 感谢您的理解和编写代码。  

    此致、

    Zoey

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

    您好、 

    SYSCONF 和源文件已经被更新。 请将其用于测试情况1 (Stop2→RunSleep0)和情况2 (SysTick)

    在本示例中、我使用 TimerG0从低功耗模式唤醒、使用 LED1  观察 SysTick 活动。

    (我尝试在 sysconf 中删除 I2C 和所有 UART 设置、MCU 会 在进入低功耗模式时停止 SysTick。)

    SYSCTL_POWER_POLICY_SLEEP_TO_STANDBy.c

    e2e.ti.com/.../5516.sysctl_5F00_power_5F00_policy_5F00_sleep_5F00_to_5F00_standby.c

    SYSCTL_POWER_POLICY_SLEEP_TO_STANDBy.syscfg

    e2e.ti.com/.../5516.sysctl_5F00_power_5F00_policy_5F00_sleep_5F00_to_5F00_standby.syscfg.c

    谢谢、此致

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

    您好!
    我已经完成了有关 SYSOSC 和 SysTick 的测试。 这里是供您参考的演示代码 e2e.ti.com/.../E2E_5F00_SYSOSC_5F00_SYSTIC_5F00_STOP2_5F00_L2228.zip

    MCU 将进入 STOP1。 而且计时器将每1s 唤醒一次 MCU、然后切换 PA24以查看时钟是否为32MHz (SYSOSC)。

    在低功耗模式下、如果 SysTick 工作、PA22将每50ms 切换一次。 但事实并非如此、这意味着在 stop2中、SysTick 不工作。

    此致、

    Zoey

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

    感谢您的测试和结果。

    实际上、在您的示例中不会发生 SysTick 中断。

    但是、我通过添加 I2C、UART 和 SysTick 来编辑了 empty.syscfg。

    您能否再次使用它进行测试?

    e2e.ti.com/.../empty_5F00_edit_5F00_syscfg.zip

    这是我的测试结果。

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

    您好!

    由于 UART 和 I2C 默认已启用异步时钟请求、这将停止 MCU 以进入低功耗模式。 请参考下图。

    请尝试添加以下代码。 谢谢

        UART_0_INST->GPRCM.CLKCFG = 0xA9000100;
        UART_1_INST->GPRCM.CLKCFG = 0xA9000100;
        UART_2_INST->GPRCM.CLKCFG = 0xA9000100;
        I2C_0_INST->GPRCM.CLKCFG = 0xA9000100;

    此致、

    Zoey

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

    您好、 

    感谢您的支持。  已解决 SysTick 问题。

    但是、在电源策略从 Stop2更改为 RunSleep0后、无法启用 SYSOSC。 ( DL_SYSCTL_getPowerPolicyRUNSLEEP ()的返回值是 RunSleep3)[/QUOT]

    这个问题怎么样、您能重现吗?

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

    从 STOP2到 SLEEP0的 SYSOSC? 或 stop2才能运行?

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

    SYSOSC 从 Stop2到 Run0。  

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

    您可以看到、在我提供的演示代码中、

    当计时器中断即将到来时、MCU 将唤醒以达到运行0、GPIO 将被切换。 切换时间可以证明 CPU 正在运行32MHz、这意味着 SYSOSC 已启用。

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

    退出__WFI 后、 即使 RUNSLEEP 的当前电源策略为 RUN_SLEEP_NOT_ENABLED、而 STOP 的电源策略为 STOP2、SYSOSC 也会自动开启、是否正确?  

    如果我要将电源策略从 Stop2更改为 Run0、我该怎么办? 如上所述、我是通过使用 DL_SYSCTL_setPowerPolicyRUN0SLEEP0 ()来实现它的、但 DL_SYSCTL_getPowerPolicyRUNSLEEP ()的返回值是 RunSleep3而不是 RunSleep0。

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

    否  

    _WFI ();将使 MCU 进入低功耗模式。 您可以在 ARM 官方网站上找到详细信息。

    DL_SYSCTL_setPowerPolicyRUN0SLEEP0 () 将低功耗模式设置为 SLEEP0、但不启用 MCU 立即进入低功耗模式。

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

    感谢您的解释。

    如果我想从 Stop2进入 Sleep0、  在调用 DL_SYSCTL_setPowerPolicyRUN0SLEEP0 ()之后、DL_SYSCTL_getPowerPolicyRUNSLEEP ()的返回值会怎样? 我期望是  DL_SYSCTL_POWER_POLICY_RUN_SLEEP0、但 实际上是  DL_SYSCTL_POWER_POLICY_RUN_SLEEP2。

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

    您好、 

    我将我的应用要求应用到了示例中、SysTick 的操作实在是太奇怪了。

    我知道您很忙、但能否再次确认以下要求? 我还附加了经过编辑的代码(.c 和.syscfg)

    SysTick:中断优先级=最低、CalculatedPeriod = 1ms

    定时器:  中断优先级=低电平、TimerClockPrescaler = 256、DesiredTimerPeriod = 10s

    e2e.ti.com/.../E2E_5F00_SYSOSC_5F00_SYSTIC_5F00_STOP2_5F00_L2228_5F00_edited.zip

    这是我的测试结果

    谢谢、祝您好运!

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

    您好!  

    这是因为、一旦您进入计时器中断、SysTick 就会工作、并且持续计数。 然后 MCU 退出中断处理程序并进入低功耗模式、SysTick 将停止工作。 但在实现下一个计时器中断之前、SysTick 将持续计数。  这样、SYSTIC 最终将计数到0并触发中断。

    尝试在计时器中添加复位 SysTick 函数。 退出中断处理程序后、SysTick 将复位、并且不会下次计数。

    void TIMER_0_INST_IRQHandler(void)
    {
        switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
        case DL_TIMERG_IIDX_ZERO:
            DL_GPIO_clearPins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
            //delay_cycles(10000);
            DL_GPIO_setPins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
            SysTick->LOAD  = (uint32_t)(32000 - 1UL);
    
            break;
        default:
            break;
        }
    }

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

    您好、 

    我曾尝试在计时器中添加复位 SysTick 函数、但并没有解决问题。

    此外、我还有2个问题。

    1)由于 SysTick 中断优先级低于定时器、因此如果 SysTick 计数为0并触发中断、MCU 将在完成中断处理程序后返回休眠状态、导致 SysTick 停止。

    但是、正如您在附加的图像中看到的、SysTick 似乎仍在 Stop2模式下运行、即使没有计时器中断也是如此。  在这种情况下、除了计时器之外、是否有其他器件可以将 MCU 从 Stop2模式唤醒?

    2)在 syscfg、sysctl 选项卡中、我将 LowPowerPolicy 更改为 STANDBY1、即使没有在计时器中复位 SysTick、也不会发生此问题。

    根据上述内容、"计时器到来时、MCU 将被唤醒至 run0"。 那么、唤醒后的 Standby1和 Stop2之间的差异是什么 、导致 SysTick 运行方式不同呢?

    此致!

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

    您好!

    唤醒后 Standby1和 Stop2之间的区别是什么 导致 SysTick 行为不同?

    理论上、SysTick 不能在 STOP1和 STANDBY1模式下工作。 这在您的测试中似乎是奇怪的。 我将在 L1228和 L1306中进行实验。

    此致、

    Zoey

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

    您好!

    我已经完成了测试并查明当您处于停止模式或待机模式时、哪些 LFCLK 仍处于启用状态、SysTick 仍将与 LFCLK (32KHz)配合使用

    平地机、

    Zoey

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

    您好、 

    我已经完成测试并了解了当您处于停止模式或待机模式时、仍启用了 LFCLK

    如果我使用待机1模式、LFCLK 会自动禁用、对吧?

    对于 Stop2模式、您可以告诉我禁用 LFCLK。

    顺便说一下、请指导我如何 检查 LFCLK 是否已禁用。

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

    您好!

    如果我使用待机1模式、LFCLK 会自动禁用、对吧?

    [报价]

    对于 Stop2模式、您能否教我禁用 LFCLK

    无法禁用 LFCLK。  

    顺便说一句、请指导我如何 检查 LFCLK 是否已禁用

    请参阅下面的寄存器。

    此致、

    Zoey

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

    您好、 

    感谢您的支持!

    此致!

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

    您好!

    另外、感谢您进行详细测试并为我们的用户指南和芯片找出这个"错误"。 我将为我们的设计提供有关 STOP 模式和 standby0下的 SysTick 奇数操作的反馈

    此致、

    Zoey