打印
[ARM入门]

CortexM0+ 无法进入深度睡眠

[复制链接]
2203|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gameboy374 于 2018-11-14 11:11 编辑

Hi all
请教大家一个关于CortexM0+芯片无法进入深度睡眠的问题。
问题场景:
芯片上电,Keil仿真执行如下程序
    API_SoftDelayms(3000);
    __disable_irq();
    while(1)
    {
            SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
            __WFI();
            API_SoftDelayms(300);
    }
理论上,进入深度睡眠模式之后keil会丢失连接,功耗大幅度降低。
实际上,Keil没有丢失连接,阻塞在__WFI()这段程序;SCB->SCR = 0x4;点击“Stop code execution”,断点会跳转到API_SoftDelayms(300);点击“Start code execution”程序继续阻塞在__WFI();如此循环,功耗没有降低,也无中断产生。
请教各位,该问题应该从哪方面着手?CortexM0+进入深度睡眠的程序流程是否正确,或者还有其他的寄存器需要考虑到?

相关帖子

沙发
xyz549040622| | 2018-11-14 12:23 | 只看该作者
不要用在线仿真测试,建议点个灯做标志之类的。

使用特权

评论回复
板凳
gameboy374|  楼主 | 2018-11-14 17:02 | 只看该作者
问题点已经找到,在于该语句:__disable_irq();
禁用全局中断之后,如果有其他中断产生(如RTC中断,可以在低功耗模式下运行),MCU会被唤醒但是不会执行该中断服务程序
具体原因请参阅下图:


文件:《ARM Cortex-M0权威指南》 Page161、Page163

使用特权

评论回复
地板
lukecy| | 2018-11-29 16:34 | 只看该作者
楼主问题解决了吗?我没禁用全局中断,debug时也和你一样的现象程序阻塞在__WFI,stop就会跳到下一句这样。功耗也几乎没变。

使用特权

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

本版积分规则

7

主题

16

帖子

0

粉丝