Other Parts Discussed in Thread: MSP430F6779A, MSP430F67791A, MSP430F67791
Hi All,
I have a similar problem, that was in e2e.ti.com/.../1728640 post, but my RTC don't reset after power off - it stop and continue after power on.
I connect 3V battering to AUXVCC3 pin via diode. I try to transfer code to LPM3.5 before power off, but it not work.
I found good example, that realy work on my device -
void main (void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
AUX3CHCTL = AUXCHKEY | AUXCHC_1 | AUXCHV_1 | AUXCHEN; // Enable Charger for AUX3 to enable RTC
if (SYSRSTIV == SYSRSTIV_LPM5WU)
{
// When woken up from LPM3.5, reinit since LPMx.5 will cause a BOR.
PMMCTL0_H = PMMPW_H; // open PMM
PM5CTL0 &= ~LOCKIO; // Clear LOCKBAK and enable ports
PMMCTL0_H = 0x00; // close PMM
}
// Initialize LFXT1
UCSCTL6 &= ~(XT1OFF); // Enable XT1
UCSCTL6 |= XCAP_3; // Internal load cap
// Loop until XT1, XT2 & DCO fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
// Configure RTC_C
RTCCTL0_H = RTCKEY_H; // Unlock RTC_C module
RTCCTL1 |= RTCHOLD; // BCD mode, RTC hold, Set RTCTEV for 1 minute alarm
// event interrupt
RTCYEAR = 2016; // Year = 0x2011
RTCMON = 10; // Month = 0x10 = October
RTCDAY = 07; // Day = 0x07 = 7th
RTCDOW = 05; // Day of week = 0x05 = Friday
RTCHOUR = 11; // Hour = 0x11
RTCMIN = 27; // Minute = 0x59
RTCSEC = 00; // Seconds = 0x45
RTCCTL1 &= ~(RTCHOLD); // Start RTC calendar mode
RTCCTL0_H = 0;
// Enter LPM3.5
UCSCTL6 |= XT1OFF; // Turn off clock for LPMx.5 operation. ACLK will still
// remain active
PMMCTL0_H = PMMPW_H; // Open PMM Registers for write
PMMCTL0_L |= PMMREGOFF; // and set PMMREGOFF
__disable_interrupt();
__bis_SR_register(LPM4_bits); // Enter LPM3.5 mode with interrupts enabled
__no_operation();
// Code should NOT get here. This means that LPM3.5 was not properly entered.
// Ensure that an external power supply was ued. Or else JTAG will put the CPU
// in LPM0 mode.
// Stop the RTC
RTCCTL0_H = RTCKEY_H; // Unlock RTC_C module
RTCCTL1 |= RTCHOLD; // RTC hold
RTCCTL0_H = 0; // Lock RTC_C module
while(1)
{
__delay_cycles(1000); // Delay
}
}
In this example RTC continue count after power off, but if I add(for example) some initialization of somethig(for example TimerA3) I'll get old problem
void main (void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
AUX3CHCTL = AUXCHKEY | AUXCHC_1 | AUXCHV_1 | AUXCHEN; // Enable Charger for AUX3 to enable RTC
if (SYSRSTIV == SYSRSTIV_LPM5WU)
{
// When woken up from LPM3.5, reinit since LPMx.5 will cause a BOR.
PMMCTL0_H = PMMPW_H; // open PMM
PM5CTL0 &= ~LOCKIO; // Clear LOCKBAK and enable ports
PMMCTL0_H = 0x00; // close PMM
}
// Initialize LFXT1
UCSCTL6 &= ~(XT1OFF); // Enable XT1
UCSCTL6 |= XCAP_3; // Internal load cap
// Loop until XT1, XT2 & DCO fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
// Configure RTC_C
RTCCTL0_H = RTCKEY_H; // Unlock RTC_C module
RTCCTL1 |= RTCHOLD; // BCD mode, RTC hold, Set RTCTEV for 1 minute alarm
// event interrupt
RTCYEAR = 2016; // Year = 0x2011
RTCMON = 10; // Month = 0x10 = October
RTCDAY = 07; // Day = 0x07 = 7th
RTCDOW = 05; // Day of week = 0x05 = Friday
RTCHOUR = 11; // Hour = 0x11
RTCMIN = 27; // Minute = 0x59
RTCSEC = 00; // Seconds = 0x45
RTCCTL1 &= ~(RTCHOLD); // Start RTC calendar mode
RTCCTL0_H = 0;
TA3CTL = TASSEL_2 | MC_2 | TACLR;
// Enter LPM3.5
UCSCTL6 |= XT1OFF; // Turn off clock for LPMx.5 operation. ACLK will still
// remain active
PMMCTL0_H = PMMPW_H; // Open PMM Registers for write
PMMCTL0_L |= PMMREGOFF; // and set PMMREGOFF
__disable_interrupt();
__bis_SR_register(LPM4_bits); // Enter LPM3.5 mode with interrupts enabled
__no_operation();
// Code should NOT get here. This means that LPM3.5 was not properly entered.
// Ensure that an external power supply was ued. Or else JTAG will put the CPU
// in LPM0 mode.
// Stop the RTC
RTCCTL0_H = RTCKEY_H; // Unlock RTC_C module
RTCCTL1 |= RTCHOLD; // RTC hold
RTCCTL0_H = 0; // Lock RTC_C module
while(1)
{
__delay_cycles(1000); // Delay
}
}
Who knows why this is happening? Thanks
