邀请:@chunyang
@damiaa
@freebsder
@dcexpert
参与回复
本帖最后由 深圳小花 于 2021-6-26 06:05 编辑
请看一下,以下函数,能不能实现其 :当参数 为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 在单片机上电复位 后的初始值是多少? 谢谢大家 。
|