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.

MSP430FR6928 RTC_C RTC Counter Mode

Hi, 

I am debugging the RTC_C function of the MSP4330FR6928 MCU in my project. I need RTC_C working in the counter mode. However, whatever I do, it is locked to the Calendar mode.  I intend to generate 1Hz signal using the configuration. Unfortunately, the frequency is much higher. Could anyone help me identify the issue? Thanks. Here is the code from the IAR Workbench Library samples:

void main(void)
{
WDT_A_hold(WDT_A_BASE);

//Set P1.0 LED on
GPIO_setOutputHighOnPin(
GPIO_PORT_P3,
GPIO_PIN3
);

//Set P1.0 to output direction
GPIO_setAsOutputPin(
GPIO_PORT_P3,
GPIO_PIN3
);

/*
* Disable the GPIO power-on default high-impedance mode to activate
* previously configured port settings
*/
PMM_unlockLPM5();

HWREG8(RTC_C_BASE + OFS_RTCCTL0_H) = RTCKEY_H;

//Initialize Counter Mode of RTC_A_A
/*
* Base Address of the RTC_A_A
* Use Prescaler 1 as source for counter
* Specify counter as 8 bits, which asserts an interrupt for an overflow
*/
RTC_C_initCounter(RTC_C_BASE,
RTC_C_CLOCKSELECT_RT1PS,
RTC_C_COUNTERSIZE_8BIT);




//Initialize Prescalers
/*
* Base Address of the RTC_A_A
* Specify Initialization of Prescaler 0
* Use ACLK as source to prescaler
* Divide source by 8 for this prescaler
*/

RTC_C_counterPrescaleInit(RTC_C_BASE,
RTC_C_PRESCALE_0,
RTC_C_PSCLOCKSELECT_ACLK,
RTC_C_PSDIVIDER_256);

/*
* Base Address of the RTC_A_A
* Specify Initialization of Prescaler 1
* Use Prescaler 0 as source to prescaler
* Divide source by 16 for this prescaler
*/
RTC_C_counterPrescaleInit(RTC_C_BASE,
RTC_C_PRESCALE_1,
RTC_C_PSCLOCKSELECT_RT0PS,
RTC_C_PSDIVIDER_128); 

//Enable interrupt for counter overflow
RTC_C_clearInterrupt(RTC_C_BASE,
RTCTEVIFG+
RTCOFIFG+
RT0PSIFG+
RT1PSIFG
);


RTC_C_enableInterrupt(RTC_C_BASE,
RTCTEVIE+
RT0PSIE+
RT1PSIE
);

RTC_C_enableInterrupt(RTC_C_BASE,
RTCTEVIFG+
RT0PSIFG+
RTCOFIFG+
RT1PSIFG
);

//Start RTC Clock
RTC_C_startClock(RTC_C_BASE);

__bis_SR_register(GIE);

while(1);
}

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=RTC_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(RTC_VECTOR)))
#endif
void RTC_ISR(void)
{

switch (__even_in_range(RTCIV, 16)) {
case 0:
break; //No interrupts
case 2:
break; //RTCRDYIFG
case 4: //RTCEVIFG
break;
case 6:
break; //RTCAIFG
case 8:

break; //RT0PSIFG
case 10:

GPIO_toggleOutputOnPin(
GPIO_PORT_P3,
GPIO_PIN3);

break; //RT1PSIFG
case 12: //failure

break;
default: break;
}
}

  • Hi Jim,

    Please be sure to read Sections 23.3.1.1 Switching between Calendar and Counter Mode and 23.3.1.2 Counter Mode Operation in the User's Guide.

    Also, I found the "msp430fr69xx_rtc_01" code example in CCS which implements the counter mode. Unfortunately, it isn't a DriverLib code example, but it should help you figure out which registers need to be configured for this mode.

    /* --COPYRIGHT--,BSD_EX
     * Copyright (c) 2012, 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.
     *
     *******************************************************************************
     *
     *                       MSP430 CODE EXAMPLE DISCLAIMER
     *
     * MSP430 code examples are self-contained low-level programs that typically
     * demonstrate a single peripheral function or device feature in a highly
     * concise manner. For this the code may rely on the device's power-on default
     * register values and settings such as the clock configuration and care must
     * be taken when combining code from several examples to avoid potential side
     * effects. Also see www.ti.com/grace for a GUI- and www.ti.com/msp430ware
     * for an API functional library-approach to peripheral configuration.
     *
     * --/COPYRIGHT--*/
    //******************************************************************************
    //  MSP430FR69xx Demo - RTC in Counter Mode toggles P1.0 every 1s
    //
    //  This program demonstrates RTC in counter mode configured to source from ACLK
    //  to toggle P1.0 LED every 1s.
    //
    //                MSP430FR6989
    //             -----------------
    //        /|\ |                 |
    //         |  |              XIN|--
    //         ---|RST              |  32768Hz
    //            |             XOUT|--
    //            |                 |
    //            |             P1.0|-->LED
    //
    //   William Goh
    //   Texas Instruments Inc.
    //   August 2014
    //   Built with IAR Embedded Workbench V5.60 & Code Composer Studio V6.0
    //******************************************************************************
    
    #include <msp430.h>
    
    int main(void)
    {
        WDTCTL = WDTPW | WDTHOLD;               // Stop WDT
    
        P1OUT &= ~BIT0;
        P1DIR |= BIT0;
    
        PJSEL0 = BIT4 | BIT5;                   // Initialize LFXT pins
    
        // Disable the GPIO power-on default high-impedance mode to activate
        // previously configured port settings
        PM5CTL0 &= ~LOCKLPM5;
    
        // Configure LFXT 32kHz crystal
        CSCTL0_H = CSKEY >> 8;                  // Unlock CS registers
        CSCTL4 &= ~LFXTOFF;                     // Enable LFXT
        do
        {
          CSCTL5 &= ~LFXTOFFG;                  // Clear LFXT fault flag
          SFRIFG1 &= ~OFIFG;
        } while (SFRIFG1 & OFIFG);              // Test oscillator fault flag
        CSCTL0_H = 0;                           // Lock CS registers
    
        // Setup RTC Timer
        RTCCTL0_H = RTCKEY_H;                   // Unlock RTC
    
        RTCCTL0_L = RTCTEVIE;                   // RTC event interrupt enable
        RTCCTL1 = RTCSSEL_2 | RTCTEV_0 | RTCHOLD; // Counter Mode, RTC1PS, 8-bit ovf
        RTCPS0CTL = RT0PSDIV1;                  // ACLK, /8
        RTCPS1CTL = RT1SSEL1 | RT1PSDIV0 | RT1PSDIV1; // out from RT0PS, /16
    
        RTCCTL1 &= ~(RTCHOLD);                  // Start RTC
    
        __bis_SR_register(LPM3_bits | GIE);     // Enter LPM3 mode w/ interrupts enabled
        __no_operation();
    
        return 0;
    }
    
    #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_RT1PSIFG))
        {
            case RTCIV_NONE:      break;        // No interrupts
            case RTCIV_RTCOFIFG:  break;        // RTCOFIFG
            case RTCIV_RTCRDYIFG: break;        // RTCRDYIFG
            case RTCIV_RTCTEVIFG:               // RTCEVIFG
                P1OUT ^= BIT0;                  // Toggle P1.0 LED
                break;
            case RTCIV_RTCAIFG:   break;        // RTCAIFG
            case RTCIV_RT0PSIFG:  break;        // RT0PSIFG
            case RTCIV_RT1PSIFG:  break;        // RT1PSIFG
            default: break;
        }
    }
    

    Regards,

    James

    MSP Customer Applications

**Attention** This is a public forum