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.

[参考译文] MSP430FR6989:以1ms 的任意间隔通过 RTC 从 LPM3.5唤醒

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1063135/msp430fr6989-wake-from-lpm3-5-via-rtc-at-arbitrary-1ms-intervals

器件型号:MSP430FR6989
主题中讨论的其他器件:MSP-EXP430FR6989MSP430FR2433

您好!  

我正在评估几个 MSP430器件、目前正在使用 MSP4306989。

是否有办法 通过 RTC 以任意1毫秒的间隔从 LPM3.5唤醒? 通过 RT0PS 和 RT1PS 看起来有几个 RTC 除法选项(/2、/4、/8等)和 RTCNT 8、16、24、32位溢出选项。 但是、是否有方法将中断设置为、例如、5ms?

日历模式中 RTC 的最大中断频率为1分钟、对吧?

我能够通过 Timer_A 模块实现正确的中断间隔、但器件似乎没有正确进入 LPM3.5。 我想这是因为 ACLK 在 LPM3.5中不可用。 是否可以通过计时器模块从 LPM3.5唤醒?

void Sleep_LPM35_MS(uint16_t millisec)
{
    /* Timer */
    TA1CTL &= ~MC_3;                    // Stop timer
    TA1CTL |= TACLR;                    // Clear timer
    TA1CCTL0 = CCIE;                    // TACCR0 interrupt enabled
    TA1CCR0 = millisec;                 // @ 1kHz (32kHz XTL / 32)
    TA1CTL = TASSEL__ACLK | MC__UP;     // ACLK, up mode (start counter)


    /* Enter LPMx.5 */
    PMMCTL0_H = PMMPW_H;                      // Open PMM Registers for write
    PMMCTL0_L |= PMMREGOFF;                   // and set PMMREGOFF

    // Enter LPM3.5 mode with interrupts enabled. Note that this operation does
    // not return. The LPM3.5 will exit through a RESET event, resulting in a
    // re-start of the code.
    __bis_SR_register(LPM4_bits | GIE);
    __no_operation();
}

在另一个评估套件(MSP-EXP430FR6989)上、我能够通过 RTCMOD 寄存器实现所需的行为。 但我在6989上看不到 RTCMOD。 FR6989是否具有类似的功能?

// Crystal clock = 32kHz => /1000 = 32Hz => 31.25ms
void hibernate_seconds(uint8_t delay)
{
    const uint16_t freq = 32; // Hz

    // Configure RTC
    RTCMOD = freq * delay;     // Interrupt and reset every n-cycles
    RTCCTL |= RTCSS__XT1CLK | RTCSR | RTCPS__1000;
    RTCCTL |= RTCIE;

    // Enter LPM3.5 mode with interrupts enabled. Note that this operation does
    // not return. The LPM3.5 will exit through a RESET event, resulting in a
    // re-start of the code.
    PMMCTL0_H = PMMPW_H;                    // Open PMM Registers for write
    PMMCTL0_L |= PMMREGOFF;                 // and set PMMREGOFF
    __bis_SR_register(LPM3_bits | GIE);
    __no_operation();
}

谢谢、
Brian

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

    您好、脑

    LPM3.5是一种超低功耗模式、因此只需保持一个小模块工作:

    您必须使用 LXFT 进行 RTC、MCU 将在从 LPM3.5唤醒时复位

    谢谢!

    此致

    Johnson

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

    尊敬的 Johnson:

    感谢您的澄清。 这是我所期望的。 LPM3.5中使用 RTC 的要求也与 MSP430FR2433一致。

    CPU 复位是我尝试实现的功能、因此我希望使用 LPM3.5。

    但是、是否有方法对 RTC 进行编程、以从1毫秒的任意倍数唤醒? 5毫秒? 500毫秒? 是否有一个比较或调制寄存器可用于触发此器件上的 RTC 中断?

    谢谢、
    Brian

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

    您好 Brian、

    此处为 RTC 示例代码:

    https://dev.ti.com/tirex/explore/node?node=AHrEUMIycvYtJqOTx3x90Q__IOGqZri__LATEST

    https://dev.ti.com/tirex/explore/node?node=AJ0UnhORTbrCVqkpGZJdww__IOGqZri__LATEST

    谢谢!

    此致

    Johnson

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

    尊敬的 Johnson:

    这些演示展示了1秒中断周期、这很有用。 我可以编辑演示 RTC_01.c 并 将 RTC 计数器频率分频至1kHz (1ms 周期)。 但是、在从 LPM3.5唤醒之前、是否有办法让睡眠数毫秒? 说、5ms?

    我的唯一选项似乎是:

    1 (蓝色): 通过具有溢出的 RTCTEVIFG 中断 - 8位(256ms)、16位、24位或32位。

    #2 (橙色):通过 RT1PSIFG 中断、分频-/2 (2ms)、/4 (4ms)、/8 (8ms)等

    谢谢、
    Brian

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

    是否有方法可以跟踪已发生的中断数量? 这样、我可以将5个中断计为5ms?

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

    您好 Brian、

    很抱歉、这种方法没有计算中断次数的方法。

    谢谢!

    此致

    Johnson

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

    Johnson、

    我将计划使用 LPM3 (而不是 LPM3.5)和软件复位或状态机来复位程序逻辑。 LPM3可以使用 Timer_A 模块、使用晶振作为 ACLK、可轻松配置为以1ms 的任意倍数唤醒。 感谢你的帮助。

    谢谢、
    Brian