My configurations are as follows before MCU enters LPM3:
MAP_I2C_disableModule(EUSCI_B0_BASE);
MAP_I2C_disableModule(EUSCI_B1_BASE);
MAP_I2C_disableModule(EUSCI_B2_BASE);
MAP_I2C_disableModule(EUSCI_B3_BASE);
MAP_UART_disableModule(EUSCI_A0_BASE);
MAP_UART_disableModule(EUSCI_A1_BASE);
MAP_UART_disableModule(EUSCI_A2_BASE);
MAP_SPI_disableModule(EUSCI_A3_BASE);
MAP_Timer_A_stopTimer(TIMER_A0_BASE);
MAP_Timer_A_stopTimer(TIMER_A1_BASE);
MAP_Timer_A_stopTimer(TIMER_A2_BASE);
MAP_Timer_A_stopTimer(TIMER_A3_BASE);
MAP_DMA_disableModule();
MAP_SysTick_disableModule();
MAP_ADC14_disableConversion();
MAP_ADC14_disableSampleTimer();
MAP_ADC14_disableModule();
PSS->KEY = PSS_KEY_VALUE;
BITBAND_PERI(PSS->CTL0, PSS_CTL0_SVSMHOFF_OFS) = 1;
PSS->KEY = 0;
P1SEL0 = 0x00;
P1SEL1 = 0x00;
P1DIR = 0xFF;
P1OUT = 0x00;
P1IE = 0;
P1IFG = 0;
P2SEL0 = 0x00;
P2SEL1 = 0x00;
P2DIR = 0xFD;
P2OUT = 0x00;
P2IE = 0;
P2IFG = 0;
P3SEL0 = 0x00;
P3SEL1 = 0x00;
P3DIR = 0xFF;
P3OUT = 0x00;
P3IE = 0;
P3IFG = 0;
P4SEL0 = 0;
P4SEL1 = 0;
P4DIR = 0xFF;
P4OUT = 0x00;
P4IE = 0;
P4IFG = 0;
P5SEL0 = 0x00;
P5SEL1 = 0x00;
P5DIR = 0x37;
P5OUT = 0x00;
P5OUT |= BIT3;
P5IE = 0;
P5IFG = 0;
P5IES |= BIT3;
P6SEL0 = 0x00;
P6SEL1 = 0x00;
P6DIR = 0xFD;
P6OUT = 0x00;
P6IE = 0;
P6IFG = 0;
P7SEL0 = 0x00;
P7SEL1 = 0x00;
P7DIR = 0xFF;
P7OUT = 0x00;
P7IE = 0;
P8SEL0 = 0x00;
P8SEL1 = 0x00;
P8DIR = 0xFF;
P8OUT = 0x00;
P8IE = 0;
P9SEL0 = 0x00;
P9SEL1 = 0x00;
P9DIR = 0xFF;
P9OUT = 0x00;
P9IE = 0;
P10SEL0 &= ~0x3F;
P10SEL1 &= ~0x3F;
P10DIR |= 0x3F;
P10OUT &= ~0x3F;
P10IE = 0;
MAP_CS_initClockSignal(CS_MCLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_SMCLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_HSMCLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_ACLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
MAP_CS_initClockSignal(CS_BCLK,CS_LFXTCLK_SELECT,CS_CLOCK_DIVIDER_1);
BITBAND_PERI(CS->CTL2, CS_CTL2_HFXT_EN_OFS) = 0;
PJSEL0 &= ~0x0C;
PJSEL0 |= 0x03;
PJSEL1 &= ~0x0F;
PJDIR |= 0x0C;
PJOUT &= ~0x0C;
MAP_RTC_C_disableInterrupt(RTC_C_TIME_EVENT_INTERRUPT);
if(AlarmEnabled == true)
{
MAP_RTC_C_enableInterrupt(RTC_C_CLOCK_ALARM_INTERRUPT);
MAP_Interrupt_enableInterrupt(45);
}
else
{
MAP_RTC_C_disableInterrupt(RTC_C_CLOCK_ALARM_INTERRUPT);
}
Interrupt_enableSleepOnIsrExit();
while(1)
{
MAP_PCM_gotoLPM3();
__no_operation();
}
As some IOs are pulled up, they're configured as input. When I push a button on my PCB to make the MCU enter LPM3, the current consumption is on the normal level. But after several seconds (30 seconds for example, it's not the same always), the current consumption will go to a high level, more than 300uA。 I replace the XMS432 REVC with a REVB verion, and run the same codes above, there is no high current phenomenon. Why could this happen?