I'm trying to reach the current stated in the datasheet of the LPC845 in power down mode.
I'm working at Tamb = 25°C, Vdd = 3.3V, QFN33 package.
#include "fsl_debug_console.h"
#include "board.h"
#include "fsl_common.h"
#include "fsl_power.h"
#include "fsl_usart.h"
#include "fsl_syscon.h"
#include "fsl_wkt.h"
#include "fsl_iocon.h"
#include "pin_mux.h"
#include <stdbool.h>
#include "fsl_pint.h"
#include "fsl_swm.h"
/*
* Setup a GPIO input pin as wakeup source.
*/
void DEMO_PreEnterLowPower(void)
{
/* switch main clock source to FRO18M */
POWER_DisablePD(kPDRUNCFG_PD_FRO_OUT);
POWER_DisablePD(kPDRUNCFG_PD_FRO);
CLOCK_SetMainClkSrc(kCLOCK_MainClkSrcFro);
CLOCK_SetFroOscFreq(kCLOCK_FroOscOut18M);
CLOCK_SetFroOutClkSrc(kCLOCK_FroSrcFroOsc);
/* system osc power down
* application should decide if more part need to power down to achieve better power consumption
* */
POWER_EnablePD(kPDRUNCFG_PD_SYSOSC);
CLOCK_DisableClock(kCLOCK_Iocon);
CLOCK_DisableClock(kCLOCK_Uart0);
}
/*!
* @brief Main function
*/
int main(void)
{
BOARD_BootClockPll24M();
GPIO_PortInit(GPIO, 0);
CLOCK_EnableClock(kCLOCK_Iocon);
/* disable all pull ups */
for (int i =0; i< 52; i++)
{
if (i == 12) continue; //reserved
if (i == 19) continue; //reserved
if (i > 30 && i <35) continue; //reserved
if (i > 35 && i <50) continue; //reserved
IOCON->PIO[i] &= ~(IOCON_PIO_MODE_MASK);
IOCON->PIO[i] &= ~(IOCON_PIO_HYS_MASK);
}
CLOCK_DisableClock(kCLOCK_Iocon);
for (int i =0; i< 28; i++)
{
if (i == 24)// || i == 6)
{
//UART RX pin set to input
GPIO_PinInit(GPIO, 0, i, &(gpio_pin_config_t){kGPIO_DigitalInput, 0});
continue;
}
if (i == 6)
{
//S2LP shutdown must be set
GPIO_PinInit(GPIO, 0, i, &(gpio_pin_config_t){kGPIO_DigitalOutput, 1});
continue;
}
GPIO_PinInit(GPIO, 0, i, &(gpio_pin_config_t){kGPIO_DigitalOutput, 0});
}
DEMO_PreEnterLowPower();
/* disable SWD */
CLOCK_EnableClock(kCLOCK_Swm);
SWM0->PINENABLE0 = 0xFFFFFDFF; //demap everything except reset
SWM0->PINENABLE1 = 0x7F;
CLOCK_DisableClock(kCLOCK_Swm);
CLOCK_DisableClock(kCLOCK_Gpio0);
POWER_EnterPowerDown(0);
return 1;
}