您好、香榭丽舍
我的客户发现有几个 F28034无法偶尔从待机模式唤醒。 在其系统中、有3个键用作唤醒源。 例如、如果按下一个键、将生成唤醒信号。 通过 GPIO 设置唤醒信号后、F28034仍处于低功耗模式。 MCU 只能在下电上电后恢复。 与低功耗相关的代码如下所示。
静态易失性 uint8_t su8_wake_source;
/**
* MCU进入休眠模式
*此函数返回时,表明已收到唤醒信号(未滤波)
*@返回
*唤醒信号源:
* 1:开门信号1;2:开门信号2;3:关门信号
*
uint8_t BSPSUPEnterSleep (空)
{
布尔_t int_state_Before_sleep;
int_state_Before_sleep = mBSPIntIsEnable();
SU8_WAKEUP_SOURCE = 0;
//编写 LPM 代码值0
EALLOW;
if (SysCtrlRegs.PLLSTS.bit.MCLKSTS!= 1)//仅在 PLL 不处于跛形模式时进入待机模式。
{
SysCtrlRegs.LPMCR0.bit.LPM = 0x0001; // LPM 模式=待机
}
EDIS;
mBSPIntEnableWakeupInt(); //启用唤醒中断
if (false = int_state_Before_sleep)//确保全局中断打开
{
EINT;
}
mBSPSupEnableDogInt();//设置 WD 中断
操作
{
_asm (" idle");//执行此指令后,MCU进入休眠状态
/********* 睡眠模式 /
_asm (" NOP"); //从低功耗模式唤醒
mBSPSupKickDog;
} while (su8_WAKEUP_SOURCE = 0); //非门打开信号,再次进入待机状态。
if (false =int_state_Before_sleep)
{
Dint;
}
mBSPSupportDisableDogInt(); //禁用 WDT 中断
mBSPIntDisableWakeupInt();
返回 su8_WAKEUP_SOURCE;
}
/**
*唤醒中断处理
*
void BSPSupWakeupCBK (void)
{
//检查唤醒信号
if (0 = mBSPCOMGetPortPinValue (CPIN_OpenDoorSig1_Port、CPU_OpenDoorSig1_Pin))
{
SU8_WAKEUP_SOURCE = 1;
}
否则、如果(0 = mBSPCOMGetPortPinValue (CPIN_OpenDoorSig2_Port、CPU_OpenDoorSig2_Pin))
{
SU8_WAKEUP_SOURCE = 2;
}
否则、如果(0 = mBSPCOMGetPortPinValue (CPUIN_CloseDoorSig_Port、CPUIN_CloseDoorSig_Pin))
{
SU8_WAKEUP_SOURCE = 3;
}
其他
{
//非开关门唤醒,继续休眠
SU8_WAKEUP_SOURCE = 0;
}
PieIntAckClear (1); //清除中断标识
}
如果使用内部振荡器、故障仍然存在。
您是否会帮助检查此问题的根本原因? 谢谢。
BR、
年轻

