请看一下,以下函数,能不能实现其 :当参数 为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 编辑引用: 深度迷茫 发表于 2021-6-26 09:05 这么勤劳,不睡觉么?
生活所迫,没有人愿意早起呀。
引用: 深度迷茫 发表于 2021-6-26 10:00 SCR 在单片机上电复位 后的初始值是多少?Reset value: 0x0000 0000 对你的问题不 ...
非常感谢。程序不是我写的,是从网上下载的程序中的一段代码。
既然保留了,为什么还要求它必须是0呢
引用: 深圳小花 发表于 2021-6-26 15:50 非常感谢。程序不是我写的,是从网上下载的程序中的一段代码。 既然保留了,为什么还要求它必须是0呢 ...
设置成1有没有影响不知道,但设置成0肯定没影响,所以这种情况按手册走保险,没准儿人家厂家自己知道这个位设置成1会有什么功能,但是不准备开放这个功能给你,所以就规定这位必须是0。