[求助] 请教一下 深度休眠的 设置函数

深圳小花   2021-6-26 05:58 楼主

请看一下,以下函数,能不能实现其  :当参数 为FALSE时:唤醒后不再自动进入休眠   ,假定 进入函数前 SCR 的第1位 为1 

 

/**
 *****************************************************************************
 ** \brief 进入深度睡眠模式
 **
 ** \input bOnExit - TRUE:当退出异常处理后,自动再次进入休眠;
 **                  FALSE:唤醒后不再自动进入休眠   
 ** 
 ** \retval NULL                                     
 *****************************************************************************/
 void Lpm_GotoDeepSleep(boolean_t bOnExit)  // ? 错误  FALSE:唤醒后不再自动进入休眠  好象 当为FALSE时 不会起作用
{
    SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; 
    SCB->SCR |= 1u<<bOnExit;  

     //  当 bOnExit =TRUE 时  1《1  =2   即设置SCR 第1位为1  实现 当退出异常处理并返回 程序线程时,处理器自动进入休眠模式(WFI) 的功能 
   //  当bOnExit = false  时   1《0  =1  即设置SCR 第0位为1  对SCR 的第1和第2位 都没有 影响

    //  即 SCB->SCR |= 1u<<0  -->  SCB->SCR |= 1u  设置第0位为1   对第1位没有影响 

        即当 第1位为1时,并不能将第1位的1改为0

        也就起不到【唤醒后不再自动进入休眠】的预期功能

        还是处于【 当退出异常处理后,自动再次进入休眠】 的状态

}

 

请看一下,以上红色字体处我的分析对不对,谢谢大家 。还有一个问题是 SCR 在单片机上电复位 后的初始值是多少? 谢谢大家 。

本帖最后由 深圳小花 于 2021-6-26 06:05 编辑

回复评论 (5)

image.png 这么勤劳,不睡觉么?

  • image.png
点赞  2021-6-26 09:05
引用: 深度迷茫 发表于 2021-6-26 09:05 这么勤劳,不睡觉么?

生活所迫,没有人愿意早起呀。

点赞  2021-6-26 09:29

SCR 在单片机上电复位 后的初始值是多少?Reset value: 0x0000 0000

 

对你的问题不知道是怎么回事,但是发现你程序里有个问题:

你说:“即 SCB->SCR |= 1u<<0  -->  SCB->SCR |= 1u  设置第0位为1   对第1位没有影响”,确实,但是对第0位有影响,手册上说第0位必须保持是0

image.png

点赞 (1) 2021-6-26 10:00
引用: 深度迷茫 发表于 2021-6-26 10:00 SCR 在单片机上电复位 后的初始值是多少?Reset value: 0x0000 0000   对你的问题不 ...

非常感谢。程序不是我写的,是从网上下载的程序中的一段代码。

既然保留了,为什么还要求它必须是0呢

  • image.png
点赞  2021-6-26 15:50
引用: 深圳小花 发表于 2021-6-26 15:50 非常感谢。程序不是我写的,是从网上下载的程序中的一段代码。 既然保留了,为什么还要求它必须是0呢 ...

设置成1有没有影响不知道,但设置成0肯定没影响,所以这种情况按手册走保险,没准儿人家厂家自己知道这个位设置成1会有什么功能,但是不准备开放这个功能给你,所以就规定这位必须是0。

点赞  2021-7-17 11:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复