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.

[参考译文] MSP430FR2476:RTC 不兼容 ACLK 时钟源

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1324423/msp430fr2476-rtc-doesn-t-work-with-aclk-clock-source

器件型号:MSP430FR2476
主题中讨论的其他器件: MSP430FR2475

您好!

我们在器件中使用 XT1时钟发生器、在  TI 的 MSP430FR2476入门套件中使用晶体振荡器。 两个时钟均为32768。 RTC 时钟源配置如下:

   SYSCFG2中的 RTCCKSEL 为"1"

  RTCCTL 中的 RTCSS 为0x1 (SMCLK)

根据 2019年3月- 2021年9月修订的数据表 SLASEO7C、这些设置应将 RTC 连接到 ACLK。

ACLK 配置如下:

   CSCTL4中的 SELA 为0x0 (XT1CLK)

    CSCTL6中的分频值为0x0 (分频器1)

 TIMERA:TASSEL = 0x1 (ACLK)。

TimerA 工作正常、没有任何问题。 因此 ACLK 也能正常工作。

但 RTC 无法正常启动。 如果我们直接将 RTC 源时钟更改为 XT1或 VLO、它可以正常工作。 我们可以在入门套件以及我们的硬件中看到这种行为。 我们还通过查看 RTC 源以及调试和发布版本、在 TI Code Composer Studio 中的 JTAG 下检查此行为。 有时、支持 ACLK 的 RTC 似乎能够通过在两个系统上使用电源和复位序列来启动。 我们的 HW 配有  MSP430FR2475、入门套件配有 MSP430FR2476

你有什么想法吗? 提前感谢

此致、

帕维尔

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

    您好,Pavel,

    这似乎有点奇怪。  FR2476是否在调试模式和正常运行模式下演示了该问题?

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

    我修补了 msp430fr267x_rtc_03.c 的副本、其中包含来自 msp430fr267x_CS_04.c 的片段、并在 Launchpad 上成功运行。 (RTC_03声称使用 XT1、但没有)。 我想知道我们的做法是否有所不同。

    msp430fr267x_rtc_03.c:

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

    msp430fr267x_CS_04.c:

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

    //******************************************************************************
    //  MSP430FR267x Demo -  RTC, using ACLK as clock source, toggle P1.0 every 1s
    //
    //  Description: Configure ACLK to use REFO as RTC source clock,
    //               ACLK = REFO = 32kHz, MCLK = SMCLK = default DCODIV = ~1MHz.
    //
    //   ACLK = XT1 = 32kHz, MCLK = SMCLK = default DCODIV = ~1MHz.
    //
    //           MSP430FR2676
    //         ---------------
    //     /|\|               |
    //      | |               |
    //      --|RST            |
    //        |               |
    //        |               |
    //        |          P1.0 |---> LED
    //        |               |
    //
    //   Longyu Fang
    //   Texas Instruments Inc.
    //   August 2018
    //   Built with IAR Embedded Workbench v7.12.1 & Code Composer Studio v8.1.0
    //******************************************************************************
    #include <msp430.h>
    #define USE_XT1 1
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer
    
        P1OUT &= ~BIT0;                         // Clear P1.0 output latch for a defined power-on state
        P1DIR |= BIT0;                          // Set P1.0 to output direction
    
        PM5CTL0 &= ~LOCKLPM5;                   // Disable the GPIO power-on default high-impedance mode
                                                // to activate previously configured port settings
    #if USE_XT1
        P2SEL0 |= BIT0 | BIT1;                  // P2.0~P2.1: crystal pins
        do
        {
            CSCTL7 &= ~(XT1OFFG | DCOFFG);      // Clear XT1 and DCO fault flag
            SFRIFG1 &= ~OFIFG;
        }while (SFRIFG1 & OFIFG);               // Test oscillator fault flag
        CSCTL4 = SELMS__DCOCLKDIV | SELA__XT1CLK;  // set ACLK = XT1CLK = 32768Hz
    #endif // USE_XT1
    
        // RTC count re-load compare value at 32.
        // 1024/32768 * 32 = 1 sec.
        RTCMOD = 32-1;
                                                // Initialize RTC
        // Source = ACLK = REFO, divided by 1024
        SYSCFG2 |= RTCCKSEL;                    // Select ACLK as RTC clock
        RTCCTL = RTCSS_1 | RTCSR | RTCPS__1024 | RTCIE;
    
        __bis_SR_register(LPM3_bits | GIE);     // Enter LPM3, enable interrupt
    }
    
    // RTC interrupt service routine
    #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
    #pragma vector=RTC_VECTOR
    __interrupt void RTC_ISR(void)
    #elif defined(__GNUC__)
    void __attribute__ ((interrupt(RTC_VECTOR))) RTC_ISR (void)
    #else
    #error Compiler not supported!
    #endif
    {
        switch(__even_in_range(RTCIV,RTCIV_RTCIF))
        {
            case  RTCIV_NONE:   break;          // No interrupt
            case  RTCIV_RTCIF:                  // RTC Overflow
                P1OUT ^= BIT0;
                break;
            default: break;
        }
    }
    

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

    谢谢 Bruce。

    Pavel、您的项目现在是否正在运行?

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

    您好、 Bruce、您好、 Dennis、

    我已经使用 MSP430FR2476对 Stater 套件进行了两天的测试、发现在 调试模式和正常工作模式下都存在问题、具体取决于 FW 进入 MCU 的方式、下电上电和复位。 有时它仅在 JTAG 下的调试会话期间出现、有时 在从 CCS 进行"加载"之后出现。 "Reset"按钮可以提供帮助、但并不总是如此。 在进行完整的下电上电后、FW 会工作。  

    我按顺序将代码减少到您的代码、并设法 找到导致此问题的代码行:

    CSCTL5 |= SMCLKOFF_1;


    如果它位于 第42行和第47行之间、则 在"Load" and Debug mode with JTAG 之后会定期出现问题。 "Reset (重置)"按钮没有帮助。 只有从 USB 上拔下入门套件并再次将其插入、FW 才能工作。  但在复位后、它再次停止工作。  

    还有一点。  在您的代码示例中、XT1放大器不会 在 RTC 运行时运行。 激活 XT1放大器、将 FLL 重新配置为16MHz 使得这个问题更加难以重现。 它开始依赖于 XT1放大器的延迟或 我们的硬件中时钟发生器的启动时间。 我还设法重现了此问题、从而在 CSCTL5 |= SMCLKOFF_1和进入 LPM3之间增加了延迟。

    此致、

    帕维尔

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

    我以前没有尝试设置 SMCLKOFF = 1。

    一个 PUC 复位 RTCCKSEL (=0)但是不会复位 RTC (RTCSS)、所以当 RTCSS=1时、RTC 最初是使用 SMCLK 运行的。 如果在 RTC 使用时关闭 SMCLK、显然会冻结 RTC、从而无法切换时钟。 一个 POR 会复位 RTC、因此在这种情况下、启动是成功的

    为我清除问题的变通办法:

    1) 1)移动 SMCLKOFF = 1、直到设置 RTCCKSEL = 1

    2) 2)在程序开头添加"RTCCTL=0;"。

    我不知道这是不是一个勘误表本身,但它肯定是一个危险。  

    [编辑:(1)或(2)中的任何一个都可以作为变通办法。]

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

    我刚刚跳过了用于 FR2111的勘误表(参考勘误表(SLAZ687Q) p.12)、该表描述了 RTC 在其当前时钟(在这种情况下为 XT1)停止时无法切换时钟的情况。 这是一种不同的器件、细节也不同、但听起来 FR2系列 RTC 很容易受到影响。

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

    谢谢你。 是的、我认为是这样。

    我之前已经使用这个用例测试了 RTC。  如果 XT1CLK 被用作 RTC 计数器的时钟源并且 XT1CLK 停止、那么将 RTC 切换到 VLO 时钟会正常工作。 在您找到权变措施之前、我已经将此实施为针对 RTC 问题的权变措施。  

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

    非常感谢您提供的解释和解决方法。 它似乎能够正常工作。 我无法 引发错误。