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.

[参考译文] MSPM0L1117:在 MSPM0L1117 上使用 LFOSC 时的 TimerG0 中断周期不一致

Guru**** 2867950 points

Other Parts Discussed in Thread: LP-MSPM0L1117, MSPM0L1117

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1617271/mspm0l1117-inconsistent-timerg0-interrupt-period-when-using-lfosc-on-mspm0l1117

器件型号: MSPM0L1117

您好:

我目前正在研究一款概念验证器件、遇到了我不完全理解的意外行为。 在此阶段、我使用 LP-MSPM0L1117 LaunchPad、因为它足以评估 MCU 是否满足我的要求。

我的主要目标是在 MSPM0L1117 实现尽可能低的功耗的同时保持精确的时间测量。 为了更大限度地降低功耗、器件进入 Standby1 模式。 根据文档、TimerG0 可在此模式下使用、因此我要将它用作时基。

为了降低 BOM 成本、计时器由内部 LFOSC 而不是外部 LFXT 提供时钟。 我从另一个 MCU 移植了与时序相关的代码、该 MCU 已在多个制造商提供的器件上成功使用。 但是、在 MSPM0L1117 上、行为不一致。

经过进一步调查、我找到了一个演示该问题的极小示例。 TimerG0 配置在 0xFFFF 的溢出中断、并以完整 LFOSC 频率 (~32kHz) 运行、同时器件保持运行模式(即不进入 Standby1)。 在中断服务例程中、我切换 GPIO 引脚并使用 Saleae 逻辑分析仪监测引脚。

GPIO 切换之间的预期周期约为 2 秒。 然而、在实践中、间隔最多为 900µs。 我从未从我合作过的其他制造商那里观察到这种类型的 MCU 行为。

我知道 LFOSC 精度被指定为约±3%、因此我不期望周期恰好为 2 秒。 但是、我不明白为什么中断不会在恒定周期发生。 当我将 LFOSC 时钟路由到输出引脚并进行测量时、频率看起来稳定在大约 33kHz。

当我切换到 LaunchPad 上可用的外部晶体振荡器时、中断周期变得稳定且高度精确、最大变化约为 30µs、这是可以接受和预期的。

关于将 LFOSC 与 TimerG0 配合使用、尤其是在时钟稳定性、同步或低功耗模式方面、是否存在任何问题? 在使用 LFOSC 时、是否有任何已知的限制或配置细节可以解释此行为、或任何实现更稳定时序的建议方法?

 

timingIssues.png

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

    我首先想到的是、2 秒内的 900usec 约为 0.045%(450ppm)、这对于 3%的时钟来说非常合适。 您提到的 33kHz 为 0.7%、这实际上比 900usec 测量值差。

    您是否在运行模式实验中通过 LFCLK 运行 CPU? 在 32kHz 频率下、900usec 约为 30 个 CPU 时钟;如果 ISR 中有任何条件(例如 if ())、则很容易使用。 查看从 LFOSC 驱动时计时器输出 (PWM) 的外观可能会很有趣。

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

    尊敬的 Krzysztof:

    我首先要确保设备有一个干净、稳定的电源。 我不认为这是您观察到的任何抖动的原因、但它始终是一个很好的第一个地方。

    您是否观察到计时器周期较短时也会出现相同的变化? 您可以尝试缩短计时器周期并维护软件计数器。

     此致、

    Owen

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

    尊敬的 Owen:

    我没有尝试其他电源。
    我使用的是 TI LaunchPad LP-MSPM0L1117、因此通过 USB 供电。 我会尝试其他来源,但我认为它不会有帮助。

    我可以尝试使用不同于 0xFFFF 的值设置加载中断来查看行为是否会发生变化、但 我尝试了使用不同的设置来捕获中断、即使比较值保持不变、我也可以看到周期变化。

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

    您好 Bruce、

    感谢您的回答。

    CPU 以完整 32MHz 从 SYSOSC 运行。 目前我不会切换到低功耗模式。
    LFCLK 仅用于驱动 timerG0、其他所有内容都以其所能达到的速度运行。


    我可以看到、加载中断和捕获中断在引脚状态更改之间给出了不同的时间段、即使它应该是稳定的。
    只需更改 LFCLK 以将 LFXT 用作时钟源、即可在不同的周期内解决此问题。 无需更改其他代码即可获得预期行为。

    void SystemTimer_INST_IRQHandler( void )
    {
      DL_TIMER_IIDX intSource = DL_TimerA_getPendingInterrupt( SystemTimer_INST );
      DL_Timer_clearInterruptStatus( SystemTimer_INST, intSource );
    
      HAL_SYSTEM_SystickEvent_t event;
      switch ( intSource )
      {
        case DL_TIMER_IIDX_LOAD:
        {
          lastState = !lastState;
          HAL_GPIO_LedPinState( lastState );
          event = HAL_SYSTEM_EVENT_OVF;
          break;
        }
    
        case DL_TIMER_IIDX_CC0_UP:
        {
          event = HAL_SYSTEM_EVENT_COMP;
          break;
        }
    
        default:
          return;
      }
    
      if ( systickCallback != NULL )
      {
        systickCallback( event );
      }
    }

    系统中的其他中断不应发生、因此计时器中断不会被其他中断阻止。
    未定义回调、因此也不应对中断产生影响。

    我不能相信时钟信号如此变化、尤其是因为当暴露在引脚下时、时钟信号看起来是稳定的。 它不是 32,768 Hz、只是略高一点、但稳定(从查看 saleae 上的图形可以看出)。

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

    尊敬的 Krzysztof:

    我实施了一个类似的应用、在这个应用中、我以 2s 的周期(0xFFFF 负载)从 LFCLK (LFOSC) 提供 TIMG0、并在 IRQ 内切换 PA0。 我将低功耗模式策略设置为 STANDBY1。 我还在 CLK_OUT 引脚 (PA10) 上输出 LFCLK。 我没有看到您所观察到的变化太多、因此我想知道您在哪个引脚上输出 GPIO 信号、以及 LaunchPad 上是否有任何电路可能干扰此输出。

    GPIO 切换:

    ΔT 100.13638656s
    Nfalling 25
    Nrising 25
    fmin 0.2513438261036116Hz
    fmax 0.2513815035028177Hz
    Fmean 0.2513618401170737Hz
    Tstd 0.00016319663977866467 s
    Hmin 1.9889740400000009 s
    Hmean 1.989161924 s
    HSDev 0.00008598741845826281 秒
    hmax 1.9893153600000004 秒
    Lmin 1.9890292199999995 秒
    LMAN 1.9891648858333335
    lsdev 0.00008481288345426218 s
    Lmax 1.9892983800001s

    Hmax - Hmin = 341.3199999995us

    Lmax - Lmin = 269.1600000006us

    CLK_OUT:

    ΔT 100.13638656s
    Nfalling 3299147.
    Nrising 3299148.
    fmin 32894.73683855294Hz
    fmax 33003.30034748091 Hz
    Fmean 32946.54378319972Hz
    Tstd 1.145919948211834e-8 s
    Hmin 0.000015139999988605268 秒
    平均 0.000015178020015812729 秒
    HSDev 8.831878208322769e-9 s
    hmax 0.000015220000001136213 秒
    Lmin 0.000015139999974053354 s
    Lmean 0.000015174177368118403 s
    lsdev 9.65117057980261e-9 s
    Lmax 0.000015200000008917441 秒

    /*
     * Copyright (c) 2021, Texas Instruments Incorporated
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     *
     * *  Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     * *  Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * *  Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #include "ti_msp_dl_config.h"
    
    int main(void)
    {
        SYSCFG_DL_init();
    
        NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
    
        DL_TimerG_startCounter(TIMER_0_INST);
    
        while (1) {
            __WFI();
        }
    }
    
    void TIMER_0_INST_IRQHandler(void)
    {
        switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
            case DL_TIMER_IIDX_LOAD:
                DL_GPIO_togglePins(GPIO_GRP_0_PORT, GPIO_GRP_0_PIN_0_PIN);
                break;
            default:
                break;
        }
    }

    e2e.ti.com/.../4428.empty.syscfg

    此致、

    Owen

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

    尊敬的 Owen:

    很抱歉反应迟来、现在其他工作中发生的事情太多了。

    我可以看到、您用例中的变化较小、但对于我想在中使用该 MCU 的工程、仍然是 300us、时间有点过大。

    您能告诉我、如果变化较小、时间周期较短、如果是、那么它在延迟时间(1 毫秒、10 毫秒)中是怎样的?

    ClkOut - PA14
    ToggledPin - PB6

    切换
    ΔT 1472.5906173296034 s
    第 371 章
    第 371 章
    fmin 0.25189899980630714 Hz
    fmax 0.2520096261931451Hz
    Fmean 0.2519422577827418Hz
    Tstd 0.0003129457918991747 秒
    TposMean 1.9845758564151021
    TposMin 1.983669198000105
    TposMax 1.9849666960000758
    TnegMean 1.984588374464857.
    TnegMin 1.9838134019999998.
    TnegMax 1.98493283200007858320000785
    Dutymean 0.4999983238400206.
    Dutymin 0.49989151061575204
    Dutymax 0.5001071055750572
    Fmean 0.2519422593447552
    Fmin 0.25189899980630714
    fmax 0.2520096261931451.
    Pmin 3.9680408960001077 s
    Pmean 3.9691637058918916 s
    PSDev 0.0003079089944625446 秒
    Pmax 3.9698303440000164 秒
    第 370 章

    TposMax - TposMin  = 1297us
    TnegMax - TnegMin = 1119us

    我可能会被迫使用外部 xtal。

    谢谢、
    Chris

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

    您好、Chris、

    下面是我在 1ms 的周期内收集的数据:

    ΔT 60.09520128 秒
    29997.
    29997.
    fmin 498.89494769155465 Hz
    fmax 499.32341676829736 Hz
    Fmean 499.15623069081636 Hz
    Tstd 3.0677628628323143e-7
    Hmin 0.00100125000000844 s
    Hmean 0.0010016915078676957 秒
    HSDev 1.660477399697086e-7
    hmax 0.0010022499999995489 s
    Lmin 0.00100126000000045494 s
    Lmean 0.001001689278261173 s
    lsdev 1.65394388680088583-e-7
    Lmax 0.001002280000004248s

    H_RANGE 1.000
    L_RANGE 1.02.

    以上范围在我们这里。

    以下是我在 10ms 内收集的数据:

    ΔT 60.12862463999999 秒
    Nfalling 3020
    第 3020 章
    fmin 50.20322264526634Hz
    fmax 50.23911305860242 Hz
    平均频率为 50.22425886026334Hz
    Tstd 0.0000023149613833022066 秒
    Hmin 0.009951789999999164 s
    Hmean 0.009955338671745627 s
    HSDev 0.000001329100351714825 s
    hmax 0.009960460000002058s
    最小 0.009952139999999417 秒
    Lmean 0.0099553583841059 s
    lsdev 0.000001326370186367275 s
    Lmax 0.00995973999999842 秒

    H_RANGE 8.670
    L_RANGE 7.6.

    以上范围在我们这里。

    此致、

    Owen