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.

[参考译文] MSP430FR4133:无论 P4SEL0设置如何、具有 XT1CLK 源的 RTC 都可以工作

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1276297/msp430fr4133-rtc-with-xt1clk-source-works-regardless-of-p4sel0-settings

器件型号:MSP430FR4133

我有一个有趣的问题。

我正在使用 MSP‑EXP430FR4133并播放32kHz 晶体(连接到 P4.1和 P4.2)和 RTC。

我通过以下方式设置 RTC:

RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1 | RTCIE; // XCO, reset, no divider, interrupt enable

令人惊讶的是、即使在没有设置 P4SEL0 = BIT1 | BIT2的情况下、RTC 似乎也能工作。 实际上、它甚至可以与明确设置 P4SEL0 = 0的 ME 配合使用。

根据 MSP430FR4133数据表(第57页)、这不应该工作、因为 XTAL 所连接的引脚不会连接到时钟系统。

有什么关于发生什么事的建议吗?

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

    尊敬的 Rob:

    Hmmm....no将确定此处发生了什么情况。  根据文档、不应该发生这种情况。  我将在工作台上设置并进行探测。  这是你的试镜吗?

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

    谢谢您、Dennis。 我在下面提供了来自 CCS 的代码。

    这对我来说是个试金石、因为这款产品的功耗和可靠性非常重要、我不太同意有这样的风险、因为我不了解这里发生了什么。

    我在多个位置设置了 P4SEL0、以便尽量确定它确实应该为0。

    #include <msp430.h>
    
    void init_rtc(void);
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;    // Stop the Watchdog Timer
        PM5CTL0 &= ~LOCKLPM5;
    
        P1DIR |= BIT0;   // Set P1.0 as output
    
        P4SEL0 = 0x0;
        RTCMOD = 32768;  // The RTC will overflow/interrupt when reaching 32768
        P4SEL0 = 0x0;
        RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1 | RTCIE; // XCO, reset, no divider, interrupt enable
        P4SEL0 = 0x0;
        __enable_interrupt();
        P4SEL0 = 0x0;
    
    }
    
    // RTC interrupt service routine
    #pragma vector=RTC_VECTOR
    __interrupt void RTC_ISR(void)
    {
        if (RTCIV == RTCIV_RTCIF)
        {
            P1OUT ^= BIT0;
        }
    }

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

    尊敬的 Rob:

    很高兴在这方面为您提供帮助。  让我确保我理解目标。  您打算将 XT1用作 RTC 的时钟源、对吗?

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

    谢谢 Dennis。

    很正确、我打算使用 XT1作为时钟源。 我知道我需要设置 P4SEL0 = BIT1 | BIT2、以便获得 XT1时钟功能。

    我感到担心的是、即使 P4SEL0 = 0时、XT1时钟似乎也能工作。 在我分享的代码上面的 LED P1OUT 闪烁,即使它不应该。

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

    尊敬的 Rob:

    经过一些实验后、显示设置 P4SEL = 0x00且 RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1 | RTCIE 不会停止 XT1。  但是、设置 P4SEL = 0x00且 RTCCTL = RTCSS__DISABLED | RTCSR | RTCPS__1 | RTCIE 会。  我已使用示波器对此进行了验证。  因此、启用 RTC 似乎会使能 XT1、如果您要将 XT1IN 和 XT1OUT 用作 P4.1和 P4.2数字 IO、这是一个坏消息。  我需要向系统团队核实这一点。  在您的情况下、这应该不是问题、因为您将使用这些引脚用于 XT1。

    下面是我的代码副本。

    #include <msp430.h>
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;    // Stop the Watchdog Timer
        PM5CTL0 &= ~LOCKLPM5;
        P1DIR = 0xFF;
        P1OUT = 0x00;
        P2DIR = 0xFF;
        P2OUT = 0x00;
        P3DIR = 0xFF;
        P3OUT = 0x00;
        P4DIR = 0xFF;
        P4OUT = 0x00;
        P5DIR = 0xFF;
        P5OUT = 0x00;
        P6DIR = 0xFF;
        P6OUT = 0x00;
        P7DIR = 0xFF;
        P7OUT = 0x00;
        P8DIR = 0xFF;
        P8OUT = 0x00;
    
    #if 1 // enable XT1 pins
        P4SEL0 = (BIT1 | BIT2);
        RTCCTL = RTCSS__XT1CLK | RTCSR | RTCPS__1 | RTCIE;
    #else // disable XT1 pins
        P4SEL0 = 0x00;
        RTCCTL = RTCSS__DISABLED | RTCSR | RTCPS__1 | RTCIE;
    #endif
    
        RTCMOD = 32768;  // The RTC will overflow/interrupt when reaching 32768
    
        __enable_interrupt();
    
        // enter LPM3
        LPM3;
    
        // sleep
        for(;;);
    
    }
    
    // RTC interrupt service routine
    #pragma vector=RTC_VECTOR
    __interrupt void RTC_ISR(void)
    {
        if (RTCIV == RTCIV_RTCIF)
        {
            P1OUT ^= BIT0;
        }
        LPM0_EXIT;
    }
    
    

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

    非常感谢您的确认! 我很想听系统团队说些什么。

    所以如果使能 RTC 将使能 XT1

    使用 RTCSS__SMCLK 或 RTCSS__VLOCLK 启用 RTC 是否 也会启用 XT1? 或者只能与 RTCSS__XT1CLK 配合使用?