| 一,问题描述         最近使用KDS做一些基于KSDK的超低功耗程序,发现如果不带PE的工程就能顺利进入低功耗,但是带PE的工程总是无法进入想要的超低功耗。这里以硬件FRDM-K22F120M为平台详细说明问题。新建一个带PE和不带PE的默认工程,不做任何的配置,然后直接进入VLLS3功耗模式,不带PE的工程测试的功耗大概为3.3uA,但是带PE的工程却有大概260uA,进入低功耗VLLS3的代码如下: void ENTER_VLLS3(void) { 
  volatile unsigned int dummyread; 
   SMC_PMPROT = SMC_PMPROT_AVLLS_MASK; 
   /*Set the STOPM field to 0b100 for VLLS3 mode */ 
   SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK; 
   SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x4); 
   SCB->SCR &= (unsigned int)~(unsigned int)(SCB_SCR_SLEEPONEXIT_Msk); 
   SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; 
  SMC_STOPCTRL = 0x03; 
   /*waitfor write to complete to SMC before stopping core */ 
   dummyread = SMC_PMCTRL; 
   /*Now execute the stop instruction to go into LLS */ 
   //stop();   __asm__("WFI"); //KDS   //asm("WFI");//Iar 
 } 从功耗的角度看,PE工程也有进入低功耗的表象,但是功耗的值却远远高于VLLS3的功耗,根据功耗情况看,很像是进入了STOP的模式。 那么是什么原因导致PE工程和非PE工程的不同结果呢? 
 |