查看: 2479|回复: 6

[求助] 【求助】KL03不能进入VLPS状态

[复制链接]

该用户从未签到

1

主题

3

帖子

0

新手上路

Rank: 1

积分
23
最后登录
2016-5-24
发表于 2015-8-10 20:43:07 | 显示全部楼层 |阅读模式
用KL03做低功耗,但是始终不能进入VLPS状态,设置如下:时钟源为LIRC8M,FCRDIV=1,OUTDIV1=1,OUTDIV4=3,LIRC_DIV2=0.即core_clk=2MHz,bus/Flash clock=1MHz.
vlpr函数:
void enter_vlpr(void)
{
        SMC_PMPROT = SMC_PMPROT_AVLP_MASK;   
       SMC_PMCTRL &= ~SMC_PMCTRL_RUNM_MASK;
       SMC_PMCTRL  |= SMC_PMCTRL_RUNM(0x2);
}

void enter_vlps(void)
{
        SMC_PMPROT = SMC_PMPROT_AVLP_MASK;  
        SMC_PMCTRL |= SMC_PMCTRL_STOPM(2);
        SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;       
        dummyRead = SMC_PMSTAT;
        __WFI();

}

int main(void)
{               
                SIM->SCGC5    |= (1UL <<  10);     
                PORTB->PCR[13] = PORT_PCR_MUX(0x01);
                FPTB->PDDR = FGPIO_PDDR_PDD(1<<13);
                enter_vlpr();
                enter_vlps();
                while(1)
                {                       
                        FPTB->PSOR = FGPIO_PSOR_PTSO(1<<13);
                        delay_ms(10);
                        FPTB->PCOR = FGPIO_PCOR_PTCO(1<<13);
                        delay_ms(10);
                }

现象是LED时钟会持续闪烁,也就是没有进入VLPS状态,请教FSL,配置哪里出错了,多谢。

我知道答案 目前已有6人回答

评分

参与人数 1NXP金币 +3 收起 理由
小七 + 3

查看全部评分

回复

使用道具 举报

该用户从未签到

0

主题

45

帖子

0

注册会员

Rank: 2

积分
146
最后登录
1970-1-1
发表于 2015-8-10 23:35:25 | 显示全部楼层
请看如下标准的写法:
void enter_vlps(void)
{
  volatile unsigned int dummyread;
  /* The PMPROT register may have already been written by init code
     If so then this next write is not done since  
     PMPROT is write once after RESET
     allows the MCU to enter the VLPR, VLPW, and VLPS modes.
     If AVLP is already writen to 0
     Stop is entered instead of VLPS*/
  SMC_PMPROT = SMC_PMPROT_AVLP_MASK;           
  /* Set the STOPM field to 0b010 for VLPS mode */
  SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK;
  SMC_PMCTRL |=  SMC_PMCTRL_STOPM(0x2);
  /*wait for write to complete to SMC before stopping core */  
  dummyread = SMC_PMCTRL;
  dummyread++;
  /* Now execute the stop instruction to go into VLPS */
  #ifdef CMSIS
  /* Set the SLEEPDEEP bit to enable deep sleep mode (STOP) */
  SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
  __wfi();
#else
  stop();
#endif
}

另外进入VLPS前关掉clock monitor
void clockMonitor(unsigned char state)
{
    if(state)
      MCG_C6 |= MCG_C6_CME0_MASK;
    else
      MCG_C6 &= ~MCG_C6_CME0_MASK;
}
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2015-8-11 10:05:03 | 显示全部楼层
楼主除了安装楼上的标准方法,其次你还要注意下。
PMPROT是一个复位后只写一次的寄存器。
你需要检查下,在你的启动代码中,是否已经有对PMPROT的操作,比如关掉VLPS,那么后面就算你再使能,不复位的话,也是无效的,很多网友不能进入具体功耗,就是这个原因导致。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-8-11 11:58:48 | 显示全部楼层
    KL03好像有个bug,是个关于RTC的一个标志,需要先清除这个标志才能进入VLPS模式
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    2016-5-24
     楼主| 发表于 2015-8-21 13:15:52 | 显示全部楼层
    cxtarm 发表于 2015-8-11 11:58
    KL03好像有个bug,是个关于RTC的一个标志,需要先清除这个标志才能进入VLPS模式 ...

    你好 cxtarm,具体是哪个寄存器,还有印象吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-8-21 13:47:21 | 显示全部楼层
    siemens_cool 发表于 2015-8-21 13:15
    你好 cxtarm,具体是哪个寄存器,还有印象吗?

    不记得了,晚上搜下,很多介绍的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    23
    最后登录
    2016-5-24
     楼主| 发表于 2015-8-21 13:58:55 | 显示全部楼层
    cxtarm 发表于 2015-8-21 13:47
    不记得了,晚上搜下,很多介绍的

    多谢师兄!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-28 08:05 , Processed in 0.101959 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表