[Kinetis]

Help,MCU为MKL16Z128,在VLPR模式下电流为6mA,

[复制链接]
3959|35
手机看帖
扫描二维码
随时随地手机跟帖
DongweiMiao|  楼主 | 2015-7-2 09:59 | 显示全部楼层 |阅读模式
MCU为MKL16Z128,在VLPR模式下电流为6mA,使用LPM.c中的Enter_Vlpr()
在VLPR模式下电流为6mA,求助那儿出问题了?
u32 enter_vlpr(void)
{
    S32 i;
    U32 return_value;
    if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4)
    {
         return_value = 0x14;
    }
    /* The PMPROT register may have already been written by init code
     If so then this next write is not done.  
     PMPROT is write once after RESET  
     this write-once bit allows the MCU to enter the
     very low power modes: VLPR, VLPW, and VLPS   
     */
    SMC_PMPROT = SMC_PMPROT_AVLP_MASK;  
   
    /* Set the (for MC1)LPLLSM or (for MC2)STOPM field
     to 0b010 for VLPS mode -
     and RUNM bits to 0b010 for VLPR mode  
    */
    SMC_PMCTRL &= ~SMC_PMCTRL_RUNM_MASK;
    SMC_PMCTRL  |= SMC_PMCTRL_RUNM(0x2);
    /* Wait for VLPS regulator mode to be confirmed */
    for (i = 0 ; i < 10000 ; i++)
    {     
        /*
            check that the value of REGONS bit is not 0
             once it is a zero we can stop checking
        */
      if ((PMC_REGSC & PMC_REGSC_REGONS_MASK) ==0x04)
        {
            /* 0 Regulator is in stop regulation or in transition
            to/from it
            1 MCU is in Run regulation mode
            */
      }  
      else  break;
    }  
  if ((PMC_REGSC & PMC_REGSC_REGONS_MASK) ==0x04)
    {  
      return_value = 0x24;
    }
  /* SMC_PMSTAT register only exist in Mode Controller 2 MCU versions */
  if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK) == 4)  
    {
      return_value = SMC_PMSTAT;
    }
  return (return_value);
}

相关帖子

FSL_TICS_ZJJ| | 2015-7-2 10:18 | 显示全部楼层
这个功耗,说明没有进入VLPR。
楼主可以参考官方的KL26的低功耗例程:
                if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4)
                  exit_vlpr();
                 /*Maximum clock frequency for this mode is core 4MHz and Flash 1Mhz*/
                printf("Press any key to enter VLPR\n\r ");
                uart0_getchar(UART0_BASE_PTR);
                printf("Configure clock frequency to 4MHz core clock and 1MHz flash clock\n\r ");
                op_mode = what_mcg_mode();
                if(op_mode==PEE)
                {
                  vlp_clock_config(BLPE);
                } else if (op_mode==FEI)
                {
                  vlp_clock_config(BLPI);
                }
                clockMonitor(OFF);
                /*Go to VLPR*/
                enter_vlpr();   // get out of VLPR back to RUN
                if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 4){
                    printf("  in VLPR Mode !\n\r ");
                } else if ((SMC_PMSTAT & SMC_PMSTAT_PMSTAT_MASK)== 1){
                    printf("  in Run Mode  !\n\r ");
                    clockMonitor(ON);
                }

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-7-2 10:20 | 显示全部楼层
klxx-sc-baremetal.rar (2.42 MB)

使用特权

评论回复
评论
lovecat2015 2015-7-2 21:28 回复TA
非常感谢楼主的分享 
军训的茶杯| | 2015-7-2 11:44 | 显示全部楼层
1、没进低功耗
2、IO配置有问题

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-2 13:06 | 显示全部楼层
Thank,按是个初学者,试试

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-2 13:19 | 显示全部楼层
KL26的代码能直接下载到KL16吗

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-2 16:37 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-2 10:18
这个功耗,说明没有进入VLPR。
楼主可以参考官方的KL26的低功耗例程:
                if ((SMC_PMSTAT &  ...

参考了还是没有进入VLPR,在RUN模式。用的是外部晶振8M,RTCCLK空着。情况下能进入VLPR

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-2 16:39 | 显示全部楼层
DongweiMiao 发表于 2015-7-2 16:37
参考了还是没有进入VLPR,在RUN模式。用的是外部晶振8M,RTCCLK空着。情况下能进入VLPR ...

硬件和软件的配置条件下能进入VLPR?

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-7-2 16:43 | 显示全部楼层
DongweiMiao 发表于 2015-7-2 16:39
硬件和软件的配置条件下能进入VLPR?

On-chip voltage regulator is in a low-power mode that supplies only
enough power to run the chip at a reduced frequency. Only MCG
modes BLPI and BLPE can be used in VLPR.
你有没有把时钟模式给转了?只能是BLPI或者BLPE。
而且主频不能超过4Mhz,bus不能超过1Mhz。


使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
DongweiMiao + 1
DongweiMiao|  楼主 | 2015-7-2 16:56 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-2 16:43
On-chip voltage regulator is in a low-power mode that supplies only
enough power to run the chip a ...

把时钟转成BLPE了,你说的主频不能超过4Mhz,bus不能超过1Mhz,这个怎么设置和计算

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-7-2 17:21 | 显示全部楼层
DongweiMiao 发表于 2015-7-2 16:56
把时钟转成BLPE了,你说的主频不能超过4Mhz,bus不能超过1Mhz,这个怎么设置和计算 ...

这个很好算的,
23.jpg
如果是BLPE,那么就是不使用FLL,PLL直接使用外部晶振到core。
那你看上图中,分频的地方就只有OUTDIV1了,所以你把8M做个2分频,就可以到4M了。
然后OUTDIV4再做个4分频,就可以实现了。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
DongweiMiao + 1
coyoteie| | 2015-7-2 21:24 | 显示全部楼层
最近我也在做MSP430的低功耗,LPM3都有10mA.:Q

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-3 08:52 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-2 17:21
这个很好算的,

如果是BLPE,那么就是不使用FLL,PLL直接使用外部晶振到core。

我是仿照你给的例程写的如下,应该是4M和1M了,不知问题出在哪儿?谢谢
op_mode = what_mcg_mode();
                                  if(op_mode==PEE)
                                  {
                                    vlp_clock_config(BLPE);
                                  } else if (op_mode==FEI)
                                  {
                                    vlp_clock_config(BLPI);
                                  }
                                  clockMonitor(0);
                           enter_vlpr();
//--------------------------//
  vlp_clock_config(BLPE);     的代码如下
PEE_to_BLPE();
    OSC0_CR |= OSC_CR_ERCLKEN_MASK;
    /* External Reference is 8 MHz so div by 2 for sysclk and div 4 for flash clock*/
    SIM_CLKDIV1 = (   SIM_CLKDIV1_OUTDIV1(1)
                    | SIM_CLKDIV1_OUTDIV4(3) );            
     MCG_C1 |= MCG_C1_IRCLKEN_MASK; // enable irc
    MCG_C2 |= MCG_C2_IRCS_MASK;    // select fast irc  
    MCG_SC &=  ~MCG_SC_FCRDIV_MASK;  //set to div by 1

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-3 10:26 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-2 17:21
这个很好算的,

如果是BLPE,那么就是不使用FLL,PLL直接使用外部晶振到core。

RTC oscillator 没接有问题吗

使用特权

评论回复
quray1985| | 2015-7-3 10:39 | 显示全部楼层
功耗有些高,是不是没有进入低功耗模式啊

使用特权

评论回复
DongweiMiao|  楼主 | 2015-7-3 11:06 | 显示全部楼层
就是,不知道问题出在哪儿?,Help

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-7-3 11:07 | 显示全部楼层
DongweiMiao 发表于 2015-7-3 08:52
我是仿照你给的例程写的如下,应该是4M和1M了,不知问题出在哪儿?谢谢
op_mode = what_mcg_mode();
     ...

你看我给你的代码了吗?
vlp_clock_config直接用官方的,不要自己写。
其实你可以直接用我给你的工程,把头文件什么的改成你的芯片就行了。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
DongweiMiao + 2
FSL_TICS_ZJJ| | 2015-7-3 11:21 | 显示全部楼层
DongweiMiao 发表于 2015-7-3 08:52
我是仿照你给的例程写的如下,应该是4M和1M了,不知问题出在哪儿?谢谢
op_mode = what_mcg_mode();
     ...

或者,你把你的代码给我,我帮你修改。

使用特权

评论回复
FSL_TICS_ZJJ| | 2015-7-3 12:15 | 显示全部楼层
DongweiMiao 发表于 2015-7-3 10:26
RTC oscillator 没接有问题吗

你是说RTC_CLKIN吧,这个不接没关系。

使用特权

评论回复
评分
参与人数 1威望 +2 收起 理由
DongweiMiao + 2
DongweiMiao|  楼主 | 2015-7-3 12:31 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2015-7-3 11:21
或者,你把你的代码给我,我帮你修改。

谢谢,

FreescaleDemo.rar

124.26 KB

code

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

49

帖子

1

粉丝