查看: 11875|回复: 27

[求助] KL25如何利用低功耗定时器进行MCU唤醒

[复制链接]

该用户从未签到

4

主题

28

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
发表于 2014-6-25 12:51:52 | 显示全部楼层 |阅读模式
    第一次运用芯片型号MKL25Z128VLK4 从睡眠状态用低功耗定时器中断唤醒后程序似乎停止运行,不执行唤醒后的程序,不知什么原因,感觉程序还在中断里没有跳出来,请各位提供下帮助,谢谢!
我知道答案 目前已有27人回答
回复

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-25 13:27:44 | 显示全部楼层

RE: KL25如何利用低功耗定时器进行MCU唤醒

楼主你好。
你使用的是LPTMR作为唤醒源的是吗?
那么你有没有在LLWU的中断中清除LPTMR的标志呢?
其实我们官方有关于KL25的低功耗例程的,你可以参考看看,例程包链接:
https://www.freescale.co
m/zh-Hans/webapp/sps/site/prod_summary.jsp?code=FRDM-KL25Z&fpsp=1&tab=Design_Tools_Tab#
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

28

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
 楼主| 发表于 2014-6-25 14:23:07 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

跟踪调试下来,程序压根儿没有进入LLWU中断,是怎么回事
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-25 15:27:15 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

回复第 3 楼 于2014-06-25 14:23:07发表:
跟踪调试下来,程序压根儿没有进入LLWU中断,是怎么回事 

你是debug跟踪还是自己写程序跟踪的?
Debug跟踪可能不行,因为调试接口会断掉。
你参考下我们的官方例程呢先,看看你代码是不是写的有问题。
另外,你进入的是什么功耗模式?实际功耗有没有降下来?
如果进入的是VLLS模式,需要做IO口的释放,不然IO是翻不了的。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

28

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
 楼主| 发表于 2014-6-25 16:31:56 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

 这边进入LLS模式断电低功耗以后是无法跟踪调试的,代码完全是freescale提供的案例,只是在asm("WFI");后面加了个循环语句, 
 
SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x3) ; 
        dummyread=SMC_PMCTRL;
      
        // Set the SLEEPDEEP bit to enable deep sleep mode (STOP) 
        SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
       asm("WFI");
while(1)
    {      
     
   
      for(i=0;i

VLLSx.zip

716.2 KB, 下载次数: 45

回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-25 17:24:05 | 显示全部楼层

RE: KL25如何利用低功耗定时器进行MCU唤醒

楼主你的压缩包打不开啊。重新压缩下,我帮你看看工程并测试下。
如果是LLS模式,唤醒后是应该顺序执行的,
我这里有个问题,你在LLWU中断中加上这段话:
    SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK;
    LPTMR0_CSR |=  LPTMR_CSR_TCF_MASK;   // write 1 to TCF to clear the LPT timer compare flag
    LPTMR0_CSR = ( LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK | LPTMR_CSR_TCF_MASK  );
清掉LPTMR的标志,怀疑你的程序是死在了LLWU中断中了。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

28

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
 楼主| 发表于 2014-6-25 18:02:12 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

 // SIM_SCGC5 |= SIM_SCGC5_LPTMR_MASK;    
   //LPTMR0_CSR = ( LPTMR_CSR_TEN_MASK | LPTMR_CSR_TIE_MASK | LPTMR_CSR_TCF_MASK  ); 
   //LPTMR0_CSR |=  LPTMR_CSR_TCF_MASK;   // write 1 to TCF to clear the LPT timer compare flag
把这3条语句注释再运行,唤醒后还是不执行后面的While(1), 我估计也是死在哪个中断里面了没有跳出来,这跟硬件没多大关系吧,但如果不执行lptmr_init(0x8000,1)和enter_lls()两个函数;  那么就可以跳入while(1)循环。     VLLS.rar (797.86 KB, 下载次数: 34)
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-26 12:02:01 | 显示全部楼层

RE: KL25如何利用低功耗定时器进行MCU唤醒

硬件肯定没有问题,应该是你配置的问题,
现在附件可以打开了,我会帮你查看下,回头给你答复啊,请耐心等待下哦。
你如果不执行LPMTR的初始化和进入lls当然可以进入while了,因为你根本没有进入低功耗嘛。
回复 支持 反对

使用道具 举报

该用户从未签到

4

主题

28

帖子

0

新手上路

Rank: 1

积分
30
最后登录
1970-1-1
 楼主| 发表于 2014-6-26 12:03:25 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

  SMC_PMPROT = SMC_PMPROT_ALLS_MASK; 是什么意思?为什么加了这条语句,唤醒之后不会执行asm("'WFI")后的程序
 /* Write to PMPROT to allow LLS power modes this write-once 
     bit allows the MCU to enter the LLS low power mode*/
       SMC_PMPROT = SMC_PMPROT_ALLS_MASK;   
    
    //Set the STOPM field to 0b011 for LLS mode  
        SMC_PMCTRL &= ~SMC_PMCTRL_STOPM_MASK; 
        SMC_PMCTRL |= SMC_PMCTRL_STOPM(0x3) ; 
        dummyread=SMC_PMCTRL;
      
        // Set the SLEEPDEEP bit to enable deep sleep mode (STOP) 
        SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
        
       asm("WFI");
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2014-6-26 12:06:59 | 显示全部楼层

回复: KL25如何利用低功耗定时器进行MCU唤醒

这句是允许LLS模式的,
32.jpg
你等下啊,我看下你的代码,下午回你哦。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 21:32 , Processed in 0.167147 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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