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.

[参考译文] LP-MSPM0G3507:计时器

Guru**** 2549850 points
Other Parts Discussed in Thread: MSPM0G3507

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1543607/lp-mspm0g3507-timer

器件型号:LP-MSPM0G3507
Thread 中讨论的其他器件:MSPM0G3507

工具/软件:

我正在使用 sysctl_lfxt_standby_LP_MSPM0G3507_nortos_ticlang中的工程 mspm0_sdk_2_04_00_06SDK 中找到

我在中所做的唯一更改syscfg是将计时器时钟预分频器从 129 设置为 1。

根据我使用的代码、一个周期应该是 100ms。 但是、我注意到 122µs 在调试模式和非调试模式之间的区别 — 调试模式时为 100.143ms、正常运行时为 100.265ms。 那么 122µs 为什么有区别呢?

 #include "ti_msp_dl_config.h"


 #define TIMER_75_MILLISECONDS_TICKS (2458)
 #define TIMER_25_MILLISECONDS_TICKS (820)
 
 int main(void)
 {
     SYSCFG_DL_init();
 
     NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
     DL_SYSCTL_enableSleepOnExit();
 
     DL_TimerG_startCounter(TIMER_0_INST);
 
     while (1) {
         __WFI();
     }
 }
 
 void TIMER_0_INST_IRQHandler(void)
 {
     static uint32_t count = TIMER_75_MILLISECONDS_TICKS;
     switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
         case DL_TIMER_IIDX_ZERO
                 DL_TimerG_stopCounter(TIMER_0_INST);
 
                 if (count > TIMER_25_MILLISECONDS_TICKS) {
                     count = TIMER_25_MILLISECONDS_TICKS;
                 } else {
                     count = TIMER_75_MILLISECONDS_TICKS;
                 }
 
                 DL_Timer_setLoadValue(TIMER_0_INST, count);
             
                 DL_TimerG_startCounter(TIMER_0_INST);
 
             DL_GPIO_togglePins(GPIO_LEDS_PORT,
                 (GPIO_LEDS_USER_LED_1_PIN));
             break;
         default:
             break;
     }
 }

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

    SWD 访问总线会对系统产生一定影响、请尝试在调试模式下运行 MSPM0 而不进行调试或自由运行模式[Run - Free Run]

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

    此 122µs 差异仅在进入低功耗(待机)模式时发生。 在没有低功耗的情况下、时序始终为 100.143ms 。 那么、我可以说 122µs 是从待机模式唤醒到运行模式的时间吗?

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

    其他说明: 当我在 ISR 中读取计数器值时、它显示 819 或 2457 (基于最后一个编程值)而不是 0 。 这表明 2 个周期  已经过了 ISR 的运行时间。

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

    7.8 数据表中的时序特性显示了唤醒时间。

    这表明了这一点 2 个周期  已过 ISR 运行的时间。

    进入 ISR 的第一个代码的 ISR 至少需要 30 个以上的 CPU 周期。

     仅在进入低功耗(待机)模式时才会出现此 122µs 差异。 在没有低功耗的情况下、时序始终为 100.143ms 。 那么、我可以说 122µs 是从待机模式唤醒到运行模式的时间吗?

    这意味着您 是否测量计时器开始运行和 ISR 第一行代码之间的时间间隔? 此时间间隔之间有太多软件影响。

    对于计时器调试、最好使用带有波形输出的 PWM 来运行一些硬件调试