 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| 
  // Turn Off PLL0 because of errata declared bug that leaves it on
  if (state.bPLL0_Running){
    pll_LPC_DisablePLL0();
    pll_LPC_DisablePLL1();
  }
  // Set CPU to use oscillator and not crystal
  pll_LPC_UseOscillator();
start_sleep:
  // Sleep
  CLKPWR_DeepPowerDown(); // no ram
  // Do we really need to wake up or can we just go back to sleep?
  LPC_SC->PCONP |= CLKPWR_PCONP_PCGPIO;
  if (!EXT_POWER_ON){
  goto start_sleep;
  }
 | 
 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| #ifdef USE_LOW_POWER
#ifdef USE_DEEP_POWER_DOWN
  //---------------------------------------------------------------------------
  // Woke up from DeepPowerDown and still no External Power?
  //---------------------------------------------------------------------------
  if ((LPC_SC->PCON & BIT(11)) && !EXT_POWER_ON){
    //-------------------------------------------------------------------------
  // Set RTC to wakeup in 30s and go to the deepest sleep
  //-------------------------------------------------------------------------
  main_DeepPowerDownSleep();
  }else{
      //---------------------------------------------------------------------
      // PCON
      //  11 DPDFLAG Deep Power-down entry flag. Set when the Deep Power-down mode
      //    is successfully entered. Cleared by software writing a one to this bit.
      //---------------------------------------------------------------------
      LPC_SC->PCON |= BIT(11);
  }
#endif
#endif
 | 
| 
inline void main_DeepPowerDownSleep(void)
{
  //---------------------------------------------------------------------------
  // Set CPU to run from RTC clock
  //---------------------------------------------------------------------------
  LPC_SC->CLKSRCSEL = 2;//RTC -> PLL0
  SystemCoreClock = FREQ_RTC_OSC / ((LPC_SC->CCLKCFG & 0xFF)+ 1);
  //---------------------------------------------------------------------------
  // Just before sleeping Kick watchdog if used
  //---------------------------------------------------------------------------
#ifdef USE_WATCHDOG
  WDT_UpdateTimeOut(WDT_TIMEOUT_150S);
#endif
  RTC_Init(LPC_RTC);
  RTC_ResetClockTickCounter(LPC_RTC);
  RTC_SetTime (LPC_RTC, RTC_TIMETYPE_SECOND, 0);
  //-------------------------------------------------------------------------
  // Set alarm time = 30s.
  // So, after each 30s, RTC will generate and wake-up system out of Deep PowerDown mode.
  //-------------------------------------------------------------------------
  RTC_SetAlarmTime (LPC_RTC, RTC_TIMETYPE_SECOND,30);
  RTC_CntIncrIntConfig (LPC_RTC, RTC_TIMETYPE_SECOND, DISABLE);
  //-------------------------------------------------------------------------
  // Set the AMR for 5s match alarm interrupt
  //-------------------------------------------------------------------------
  RTC_AlarmIntConfig (LPC_RTC,RTC_TIMETYPE_SECOND, ENABLE);
  RTC_ClearIntPending(LPC_RTC,RTC_INT_COUNTER_INCREASE);
  RTC_ClearIntPending(LPC_RTC, RTC_INT_ALARM);
  RTC_Cmd(LPC_RTC, ENABLE);
  NVIC_EnableIRQ(RTC_IRQn);
  //-------------------------------------------------------------------------
  // PCON
  //  11 DPDFLAG Deep Power-down entry flag. Set when the Deep Power-down mode
  //    is successfully entered. Cleared by software writing a one to this bit.
  //-------------------------------------------------------------------------
  LPC_SC->PCON |= BIT(11);
  //-------------------------------------------------------------------------
  // Disable GPIO Power
  //-------------------------------------------------------------------------
  CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCGPIO,DISABLE);
  CLKPWR_DeepPowerDown(); // no ram
} // main_DeepPowerDownSleep
 | 
 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		 
					
				
		
 lpcware
		
			lpcware
		
		
		
		
		
		
		
		
	
			
		
		
			
					
		| LPC_SC->PLL0CON &= ~(1<<1); /* Disconnect the main PLL (PLL0) */ LPC_SC->PLL0FEED = 0xAA; /* Feed */ LPC_SC->PLL0FEED = 0x55; /* Feed */ while ((LPC_SC->PLL0STAT & (1<<25)) != 0x00); /* Wait for main PLL (PLL0) to disconnect */ LPC_SC->PLL0CON &= ~(1<<0); /* Turn off the main PLL (PLL0) */ LPC_SC->PLL0FEED = 0xAA; /* Feed */ LPC_SC->PLL0FEED = 0x55; /* Feed */ while ((LPC_SC->PLL0STAT & (1<<24)) != 0x00); /* Wait for main PLL (PLL0) to shut down */ /************** Then enter into Deep sleep mode or Power-down mode*****************/ | 
