查看: 3109|回复: 6

[求助] kl02z开发版进入WAIT模式问题

[复制链接]
  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
    发表于 2016-6-29 12:25:14 | 显示全部楼层 |阅读模式
    最近在研究kl02z开发版的低功耗模式,研究了几天后就今天开始捣鼓第一个模式--WAIT,可惜首战失利了。走过路过的版友帮忙看看是出了啥问题。
    看了参考例程后,总结出来想进入WAI模式:1、先关闭时钟监控 2、执行 SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; 和asm("WFI")。
    当程序仿真运行到 __WFI();就死在那里了,但是点击停止停止后又会跳到下一句__ISB();那里去。

    status_t SMC_SetPowerModeWait(SMC_Type *base)
    {
        /* configure Normal Wait mode */
        SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk;   
        __DSB();
        __WFI();     //换成官方源码里面的这句asm("WFI"),情况还是一样。
        __ISB();

        return kStatus_Success;
    }


    int main(void)
    {

       SIM->SCGC5|=1<<10;
    //  UATR0_Init(9600,1);
    //  UART_SendData('a');
      text_pin();//测试引脚初始化。
    //----------------------------进入WAIT模式---------------------------------------------------
      MCG->C6 &= ~MCG_C6_CME_MASK;   //关闭时钟监控
      SMC_SetPowerModeWait(SMC);  //这是KSDK2.0里面的函数
    //---------------------------------------------------------------------------------
      while(1)
      {
        lptmr_internal_ref_input(32768);
        GPIO_TogglePinsOutput(GPIOB, 1u << 7);
      }

    }


    我知道答案 目前已有6人回答
    捕获.PNG
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-6-29 12:26:20 | 显示全部楼层
    自己先顶高点
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24863
    最后登录
    2025-7-18
    发表于 2016-6-29 12:30:31 | 显示全部楼层
    楼主你好!
    如果进入wait模式,代码是会停止的,这个时候只有唤醒了,才能继续往下运行。
    唤醒可以是中断。
    所以你可以全速运行,并且配置一个外部引脚中断,一旦引脚中断发生之后,代码会继续运行下去。
    这个是低功耗的特性。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-6-29 13:17:43 | 显示全部楼层
    小恩GG 发表于 2016-6-29 12:30
    楼主你好!
    如果进入wait模式,代码是会停止的,这个时候只有唤醒了,才能继续往下运行。
    唤醒可以是中断。 ...

    好的!谢谢版主
    等会试试
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24863
    最后登录
    2025-7-18
    发表于 2016-6-29 13:36:12 | 显示全部楼层
    足球爱好者 发表于 2016-6-29 13:17
    好的!谢谢版主
    等会试试

    试过之后,如果有问题,欢迎跟帖说明最新问题情况。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-7-1 14:27:37 | 显示全部楼层
    小恩GG 发表于 2016-6-29 13:36
    试过之后,如果有问题,欢迎跟帖说明最新问题情况。

    版主,我的版子进入WAIT模式的功耗大概在12.4mA左右,跟数据手册上的数据相差深远。我用默认时钟,经检测内核、系统时钟频率为20.97MHz。按键1按下,进入WAIT模式,按下按键2,唤醒。
    int main(void)
    {
      uint16_t j=0;
      uint32_t uartClkSrcFreq;
      SIM->SCGC5|=1<<10;   //打开端口B时钟
      SIM->SCGC5|=1<<9;    //打开端口A时钟
      SIM->SCGC5|= 1<<0;//打开LPTMR时钟
    // uartClkSrcFreq=CLOCK_GetFreq(kCLOCK_CoreSysClk);//获取内核、系统时钟频率
      //uartClkSrcFreq++;
      text_pin();//两个LED灯配置。
      exti_init();//用外部中断唤醒WAIT模式

      while(1)
      {
        KeyRead();//按键扫描
        if(Trg==1)//按键1按下
        {
          Trg=0;
         Wait_TurnOff_Clock();//关闭时钟
          Wait_TurnOff_Pin(); //关闭LED灯。
           MCG->C6 &= ~MCG_C6_CME_MASK;//关闭时钟监控
          SMC_SetPowerModeWait(SMC);//进入等待模式
        }

       lptmr_LPO_clock_counter(500);//500ms延时  
       GPIO_TogglePinsOutput(GPIOB, 1u << 7);  //用来判断进入等待模式指示灯  。   
      }

    }

    void Wait_TurnOff_Clock(void)
    {
      SIM->SCGC5 |= ~(SIM_SCGC5_PORTB_MASK+SIM_SCGC5_PORTA_MASK+SIM_SCGC5_LPTMR_MASK); //关闭PA PB LPTMR
      SIM->SCGC6 |= ~(SIM_SCGC6_FTF_MASK);  //关闭 FTF(flash)
    }


    void Wait_TurnOff_Pin(void)
    {
      GPIOB->PDOR = 0xc0;//两个LED灯输出高电平,关闭LED
      PORTB->PCR[5] = 0 ;   //按键1引脚置失能
    }

    void PORTA_IRQHandler()
    {
      PORTA->ISFR |= 1<<12;//清除中断标志位
      SIM->SCGC6 |= SIM_SCGC6_FTF_MASK; //打开端口FLASH时钟
      SIM->SCGC5|=1<<10;   //打开端口B时钟
      SIM->SCGC5|=1<<9;    //打开端口A时钟
      //SIM->SCGC4|=1<<10;  //打开串口时钟
      SIM->SCGC5|= 1<<0;//打开LPTMR时钟
      text_pin(); //重新初始化LED灯引脚
    // 重新初始化按键1引脚
      GPIOB->PDDR |= ~(1<<5);  //设置引脚为输入模式
      PORTB->PCR[5] &= ~(PORT_PCR_MUX_MASK|PORT_PCR_IRQC_MASK);
      PORTB->PCR[5] |= PORT_PCR_MUX(0x01) | PORT_PCR_IRQC(0x00)| PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;  
    }



    功耗.PNG
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-7-1 14:34:27 | 显示全部楼层
    足球爱好者 发表于 2016-7-1 14:27
    版主,我的版子进入WAIT模式的功耗大概在12.4mA左右,跟数据手册上的数据相差深远。我用默认时钟,经检测 ...

    自己再顶高点
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 01:28 , Processed in 0.103142 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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