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.

[参考译文] MSPM0G3519:Sytick Re 初始化序列

Guru**** 2696755 points

Other Parts Discussed in Thread: MSPM0G3519, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1595330/mspm0g3519-sytick-re-init-sequence

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

您好、

我正在尝试重新初始化 SysTick 计时器。 我可以成功取消初始化它、但当我再次尝试初始化它时、SysTick 中断不再触发。 我是否需要遵循特定的序列或过程来正确地重新初始化 SysTick

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

    您如何(确切地)取消初始化/重新初始化?  

    DL_SysTick_init () 在中断被禁用的情况下使计时器停止。  DL_SysTick_config () 会使计时器保持运行状态、且中断已启用。

    我没有看到 (Driverlib) deInit 函数。 如果使用 DL_SysTick disable() 停止它、则可以通过调用 DL_SysTick enable () 来反转此操作。

    [这些功能很小。 您可以通过右键单击名称、然后单击“打开声明“来查看他们的工作。]

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

    我正在DL_SYSTICK_disable()进入STANDBY0模式之前和DL_SYSTICK_enable()退出模式后使用、但 SysTick 仍然不会恢复。 我也尝试直接使用__NVIC_DisableIRQ(SysTick_IRQn)__NVIC_EnableIRQ(SysTick_IRQn)来禁用和重新启用中断、但行为是相同的。

    我还尝试通过直接访问其寄存器来禁用计时器:

      SysTick ->CTRL = 0;
      SysTick -> LOAD = 0;
      SysTick -> VAL = 0;

    然后通过调用正常初始化序列SysTick_Config();、但计时器仍然不起作用。

    您能否分享一个简单有效的示例、该示例演示了在STANDBY0 MSPM0G3519 上暂停和恢复 SysTick 的正确方法、包括任何所需的重新初始化步骤?

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

    尊敬的 Embedded:
    您能分享一下您的示例吗? 根据您的代码、我可能能够找出可能存在的问题。

    此致、

    Diego Abad

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

    您好 Diego、抱歉、您的回复太晚了。 以下是我所用方法的代码片段:

    片段 1:


      DL_SysTick disable();

      DL_SYSCTL_setPowerPolicySTANDBY0 ();
      while (g_GPIOIntStatusFlag =0)
      {
        __ WFI ();
      }
      
      DL_SysTick enable ();
    片段 2:
       
       SysTick ->CTRL = 0 //禁用 SysTick 计时器
      SysTick -> LOAD = 0 //复位重载值
      SysTick ->VAL  = 0 //清除当前值
      while (g_GPIOIntStatusFlag   =0)
      {
        __ WFI ();
      }
      
      Sys Tick_Config (32000);//对应于 32MHz SYSOSC CLK 输入的 1ms 周期。
    片段 3:  
      NVIC_DisableIRQ (SysTick _IRQn);
      
      while (g_GPIOIntStatusFlag   =0)
      {
        __ WFI ();
      }
       NVIC_EnableIRQ (SysTick _IRQn);
       
    注意: G_GPIOIntStatusFlag 通过按预期运行的 GPIO 中断设置为 1。
    它们似乎都没有按预期工作。  
    此致、
    嵌入式处理

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

    尊敬的 Embedded:
    让我明天检查一下。 同时、您能否还共享您的 SysConfig 文件?

    此致、

    Diego Abad

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

    尊敬的 Diego:

    这个工程是在没有 SysConfig 的情况下创建的、您是否希望看到有关该工程的任何特定内容?

    此致、

    嵌入式处理

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

    尊敬的 Embedded:
    主要是您最初设置代码的方式。 我可以看到、该问题依赖于您在触发中断之前禁用 SysTick。 如果您禁用 SysTick 模块、不会触发中断。 我建议在中断中禁用它、然后在需要时重新启用它。

    包含“ti_msp_dl_config.h"</s>“

    uint8_t lol = 0
    内部 main (void)
      SYSCFG_DL_init ();

      /*调用 DL_SYSCTL_enableSleepOnExit 后调用 WFI 将导致
       *仅需执行 ISR 代码。 这样做是为了展示该器件的
       *睡眠时功耗低。
       */
      // DL_SYSCTL_enableSleepOnExit ();
      DL_SYSCTL_setPowerPolicySTANDBY0 ();
      while (1){
        __ WFI ();
        DL_SysTick enable ();
        DL_SysTick_CONFIG (16000000);
      }
    }

    系统 Tick_Handler(空)
      DL_GPIO_togglePins (
        GPIO_LEDS_PORT、GPIO_LEDS_USER_LED_1_PIN | GPIO_LEDS_USER_TEST_PIN);
      if (lol == 0){
        DL_SysTick disable()
        delay_cycles (1000000000);
        LOL++;
      }
    }
    此致、
    Diego Abad
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego:

    我可以首先正确地初始化和使用 SysTick 计时器。 但在应用程序的稍后阶段、我需要禁用它、进入待机模式、然后重新初始化计时器。 问题在于、退出待机模式后、SysTick 初始化似乎成功、但不再触发中断。

    谢谢。此致、

    嵌入式处理

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

    您好、Embeede:

    在您之前分享的 代码片段中、我看不到您启用了 SysTick 计时器、并将 DL_SysTick config() 调用为以下代码:   

    DL_SysTick enable ();
    DL_SysTick_CONFIG (16000000);
    如果这不起作用、 您能否尝试我分享的代码片段代码、看看这是否能让 SysTick 再次禁用和启用自身?
    此致、
    Diego Abad
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego:

    我提供的代码片段来自我尝试停止 SysTick 计时器然后重新初始化它的一节。 之前已经执行了正确的初始化。 但是、我会尝试您分享的片段、然后返回给您。

    感谢您的支持!

    此致、
    嵌入式处理