求解:LPC1114/302的deep sleep模式下电流=800uA,deep power down模式下电流=1.5mA?

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

求解:LPC1114/302的deep sleep模式下电流=800uA,deep power down模式下电流=1.5mA?

1,197 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by xumeixiaoz on Sun Aug 25 19:05:03 MST 2013
Hi,all
  最近在做的一个项目用到LPC1114/302,需要电池供电,所以在空闲的时候,要省电。从lpc11xx的datasheet上,看到lpc11xx/302进入deep sleep模式之后,工作电流可以达到2uA,而deep power down模式下可以达到220nA。于是,我用一块只有LPC1114/302,其他外接电路都断开的板子,把程序配置成启动之后即进入deep sleep模式,代码如下:

void PMU_Init( void )
{
  uint32_t regVal;
  LPC_SYSCON->PDRUNCFG &= ~(IRC_OUT_PD|IRC_PD|FLASH_PD);

  LPC_SYSCON->PDRUNCFG |= (BOD_PD|ADC_PD|SYS_OSC_PD|WDT_OSC_PD|SYS_PLL_PD);
  LPC_PMU->PCON = (0x1<<11);
  NVIC_EnableIRQ((IRQn_Type)(WAKEUP2_IRQn));
  NVIC_EnableIRQ((IRQn_Type)(WAKEUP3_IRQn));
  NVIC_EnableIRQ((IRQn_Type)(WAKEUP6_IRQn));
  NVIC_EnableIRQ((IRQn_Type)(WAKEUP12_IRQn));

  LPC_SYSCON->STARTAPRP0 = 0x00000000;
  LPC_SYSCON->STARTRSRP0CLR = 0xFFFFFFFF;
  LPC_SYSCON->STARTERP0 = ((0x1<<2)|(0x1<<3)|(0x1<<6)|(0x1<<12));
  return;
}
void PMU_Sleep( uint32_t SleepMode)
{
  uint32_t regVal;

  /* Enable all clocks, even those turned off at power up. */
  LPC_SYSCON->PDRUNCFG = ~(IRC_OUT_PD|IRC_PD|FLASH_PD);

  LPC_SYSCON->SYSPLLCLKSEL  = 0;   /* Select PLL Input         */
  LPC_SYSCON->SYSPLLCLKUEN  = 0x01;               /* Update Clock Source      */
  LPC_SYSCON->SYSPLLCLKUEN  = 0x00;               /* Toggle Update Register   */
  LPC_SYSCON->SYSPLLCLKUEN  = 0x01;
  while (!(LPC_SYSCON->SYSPLLCLKUEN & 0x01));     /* Wait Until Updated       */

  LPC_PMU->PCON = (1<<11);
  LPC_PMU->PCON |= (1<<8);
  LPC_SYSCON->PDAWAKECFG = LPC_SYSCON->PDRUNCFG;
  LPC_SYSCON->PDSLEEPCFG = 0x000018FF;
  /* If normal sleep, not deep sleep, don't do anything to SCR reg. */
  if ( SleepMode )
  {
  SCB->SCR |= NVIC_LP_SLEEPDEEP;
  }
  __WFI();
  return;
}
结果,用万用表测得工作电流是800uA,远达不到2uA。
然后,我又把程序配置成启动之后即进入deep power down模式,代码如下:
void PMU_PowerDown( void )
{
    LPC_PMU->PCON = (1<<1)|(1<<11);
SCB->SCR |= NVIC_LP_SLEEPDEEP;
LPC_SYSCON->PDRUNCFG &= ~(IRC_OUT_PD|IRC_PD);
    __WFI();
  return;
}
结果,用万用表测得电流是1.5mA,电流反而更大了。
请各位帮帮忙,看看是哪里出了问题。

Labels (1)
0 Kudos
1 Reply

806 Views
lpcware
NXP Employee
NXP Employee
Content originally posted in LPCWare by Irving on Mon Aug 26 19:36:08 MST 2013
Hi Xumeixiaoz,
关于LPC MCU各种低功耗模式的配置及如何降低功耗,主要有以下几点需要特别注意:
1.把GPIO配置为输出低电平,且取消上拉电阻设置,相关寄存器有:IOCON_PIOn_x(通过配置这个寄存器将IO设为GPIO,且关闭上下拉电阻,设置为无上下拉电阻模式),GPIO DIR(通过配置这个寄存器将GPIO设置为输出模式),GPIOnDATA(通过这个寄存器将GPIO输出低电平,不能系列此寄存器可能有所区别,有的系列通过GPIO port CLR寄存器清除GPIO输出,使得输出低电平)。
2.关掉能关掉的振荡器、外设、模拟模块等。在各个模式下能通过软件配置的模块会有所不同,一般情况下,睡眠模式可配置的模块最多,依次是深度睡眠模式,掉电模式,深度掉电模式。相关的寄存器主要有:SYSAHBCLKCTRL(主要是关掉不需要的外设时钟)、PDSLEEPCFG(主要用于深度睡眠模式设置)、PDRUNCFG(关掉不需要的外设等等电源)。在深度睡眠模式(Deep sleep mode)下,主要配置PDSLEEPCFG这个寄存器即可,将BOD、WDTOSC都掉电。
3.按User Manual和Datasheet上的要求进行低功耗模式的配置,并设置低功耗模式唤醒后需要上电的模块(通过PDAWAKECFG这个寄存器的配置)以及唤醒源,最后进入低功耗模式。
希望能够帮到你,另可由LPCware下载此型号的软件例程,一般里面都有各种睡眠模式的测试代码,可以作为参考代码用。
0 Kudos