gameboy374 发表于 2018-11-14 10:54

CortexM0+ 无法进入深度睡眠

本帖最后由 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就会跳到下一句这样。功耗也几乎没变。
页: [1]
查看完整版本: CortexM0+ 无法进入深度睡眠