在睡眠之前打开要打开的IO口中断,清楚中断标志位
/*******************************************************************************/
void GotoVlps(void)
{
PORT_HAL_ClearPortIntFlag(PORTA);
PORT_HAL_ClearPortIntFlag(PORTB);
INT_SYS_EnableIRQ(PORTA_IRQn);
INT_SYS_EnableIRQ(PORTB_IRQn);
PORT_HAL_SetPinIntMode(PORTB, 6, kPortIntFallingEdge);
PORT_HAL_SetPinIntMode(PORTB, 7, kPortIntFallingEdge);
PORT_HAL_SetPinIntMode(PORTB, 0, kPortIntEitherEdge);
PORT_HAL_SetPinIntMode(PORTA, 7, kPortIntEitherEdge);
PORT_HAL_SetPinIntMode(PORTB, 4, kPortIntEitherEdge);
PORT_HAL_SetPinIntMode(PORTA, 12,kPortIntEitherEdge);
TPM0TOFDeInit();
if (POWER_SYS_SetMode(kKlxxVlps, kPowerManagerPolicyAgreement) != kPowerManagerSuccess)
{
}
PORT_HAL_SetPinIntMode(PORTB, 6, kPortIntDisabled);
PORT_HAL_SetPinIntMode(PORTB, 7, kPortIntDisabled);
PORT_HAL_SetPinIntMode(PORTB, 0, kPortIntDisabled);
PORT_HAL_SetPinIntMode(PORTA, 7, kPortIntDisabled);
PORT_HAL_SetPinIntMode(PORTB, 4, kPortIntDisabled);
PORT_HAL_SetPinIntMode(PORTA, 12,kPortIntDisabled);
TPM0TOFInit();
}
中断的目的用于唤醒MCU,每一次中断唤醒MCU之后立即关闭中断
/*****************************************************************************/
void PORTB_IRQHandler(void)
{
INT_SYS_DisableIRQ(PORTB_IRQn);
PORT_HAL_ClearPortIntFlag(PORTB);
SysIntFlag = 1;
}
/*****************************************************************************/
void PORTA_IRQHandler(void)
{
INT_SYS_DisableIRQ(PORTA_IRQn);
PORT_HAL_ClearPortIntFlag(PORTA);
SysIntFlag = 1;
}
现在的问题是,PORTB的中断管脚每一次都能唤醒MCU,但是PORTA的中断管脚不是每一次都能唤醒MCU;
当PORTA的中断管脚有动作但是不能唤醒MCU的时候,用PORTB的中断管脚唤醒MCU,在调试窗口可看见
PORTA的中断请求标记!
有没有碰到一样的问题,怎么样才能让PORTA中断管脚每一次都能产生中断唤醒MCU? |