WCH沁恒单片机
直播中

杨春林

7年用户 923经验值
私信 关注
[问答]

函数void PowerMonitor( UINT8 s )的寄存器为什么要设置两次?

/*******************************************************************************
* Function Name : PowerMonitor
* Description : 电源监控
* Input : s:
ENABLE - 打开此功能
DISABLE - 关闭此功能
* Return : None
*******************************************************************************/
void PowerMonitor( UINT8 s )
{
if( s == DISABLE )
{
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R8_BAT_DET_CTRL = 0;
R8_SAFE_ACCESS_SIG = 0;
}
else
{
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R8_BAT_DET_CFG = 1; // 2.05V - 2.33V
R8_BAT_DET_CTRL = RB_BAT_DET_EN;
R8_SAFE_ACCESS_SIG = 0;
mDelayuS(1);
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG1;
R8_SAFE_ACCESS_SIG = SAFE_ACCESS_SIG2;
R8_BAT_DET_CTRL = RB_BAT_LOW_IE|RB_BAT_LOWER_IE|RB_BAT_DET_EN;
R8_SAFE_ACCESS_SIG = 0;
}
}
为什么这个寄存器R8_BAT_DET_CTRL要设置两次,而且第二次的设置内容还有一个一样的
R8_BAT_DET_CTRL = RB_BAT_DET_EN;
R8_BAT_DET_CTRL = RB_BAT_LOW_IE|RB_BAT_LOWER_IE|RB_BAT_DET_EN;
开关两次寄存器,而不是一次性设置所有参数

R8_SAFE_ACCESS_SIG
是为了避免这个原因吗:此后约 16 个系统主频周期(Tsys) 都处于安全模式下

回帖(1)

李莉

2022-8-4 09:54:36
配置R8_BAT_DET_CTRL寄存器是要在安全模式下进行,安全模式打开后有时间要求


这样写可以避免因为中断导致寄存器配置失败
举报

更多回帖

发帖
×
20
完善资料,
赚取积分