暂存
This commit is contained in:
24
App/system.c
24
App/system.c
@@ -342,11 +342,10 @@ void Enter_Low_Power_Sleep(void)
|
||||
P2INTE |= 0x40; // 开启 P2.6 中断允许
|
||||
P2WKUE |= 0x40; // 使能 P2.6 掉电唤醒
|
||||
|
||||
// 9. 配置 Port3 中断唤醒源 (RF_RX_DATA=P3.6)
|
||||
P3IM1 |= 0x40;
|
||||
P3IM0 |= 0x40; // 双边沿触发
|
||||
// 9. 配置 Port3 掉电唤醒源 (RF_RX_DATA=P3.6)
|
||||
// 双边沿触发与 P3INTE 中断允许现已在 RF_Init() 中常态开启 (供正常运行期间的边沿解码使用),
|
||||
// 此处只需重新武装 P3WKUE (掉电唤醒使能,会被 Wakeup_Restore() 清零) 与清除挂起标志
|
||||
P3INTF = 0x00; // 清除挂起标志
|
||||
P3INTE |= 0x40; // 开启 P3.6 中断允许
|
||||
P3WKUE |= 0x40; // 使能 P3.6 掉电唤醒
|
||||
|
||||
// 确保引脚上拉和输入使能,防止因浮空产生的功耗泄漏
|
||||
@@ -365,7 +364,10 @@ void Enter_Low_Power_Sleep(void)
|
||||
p3_wakeup_flag = 0;
|
||||
rf_wakeup_flag = 0;
|
||||
|
||||
// 10. 关闭系统滴答定时器 Timer1 中断,防止休眠时被定时器误唤醒
|
||||
// 10. 关闭系统滴答定时器 Timer1 与 RF 时间戳基准 Timer0 的中断,防止休眠时被定时器误唤醒
|
||||
// (Power Down 模式下主振荡器本应整体停振,Timer0/1 都会随之停止计数;这里仍显式关闭
|
||||
// 中断允许作为防御性保险,与 ET1 的处理方式保持一致)
|
||||
ET0 = 0;
|
||||
ET1 = 0;
|
||||
EA = 1; // 开启全局中断
|
||||
|
||||
@@ -383,10 +385,15 @@ void Enter_Low_Power_Sleep(void)
|
||||
void Wakeup_Restore(void)
|
||||
{
|
||||
EAXFR = 1;
|
||||
// 1. 立即关闭所有掉电外部中断允许与唤醒允许,防止重入
|
||||
// 1. 立即关闭 P0/P2 掉电外部中断允许与全部唤醒允许,防止重入;
|
||||
// P3INTE 的 P3.6 位不清零 —— 该中断常态用于正常运行期间的 RF 边沿解码,唤醒后仍需保持开启
|
||||
P0INTE = 0x00;
|
||||
P2INTE = 0x00;
|
||||
P3INTE = 0x00;
|
||||
P3INTE = 0x40;
|
||||
// 恢复休眠前被 Enter_Low_Power_Sleep() 关闭的 P3.6 内部上拉:LR690L 在 SHUT=1 期间数据脚
|
||||
// 高阻悬空,配合常态开启的 P3.6 中断会引发中断风暴,唤醒后必须立刻用上拉钳住电平
|
||||
P3PU |= 0x40;
|
||||
|
||||
P0WKUE = 0x00;
|
||||
P2WKUE = 0x00;
|
||||
P3WKUE = 0x00;
|
||||
@@ -398,8 +405,9 @@ void Wakeup_Restore(void)
|
||||
WKTCH = 0x00;
|
||||
WKTCL = 0x00;
|
||||
|
||||
// 3. 开启全局中断并重启系统滴答定时器
|
||||
// 3. 开启全局中断并重启系统滴答定时器 Timer1 与 RF 时间戳基准 Timer0
|
||||
EA = 1;
|
||||
ET0 = 1;
|
||||
ET1 = 1;
|
||||
|
||||
// 4. 恢复射频芯片工作模式
|
||||
|
||||
Reference in New Issue
Block a user