单独使能PA的多个IO口中断,中断能正常触发,程序运行也正常;
先使能PA的IO口中断,再使能PB口的PIN12中断时,PA口的中断不能触发,PB口的中断可以正常触发,但触发后,退出中断处理后,程序好象死机了。
请问 1、PA、PB是否可以同时使能IO口中断?
2、PB 12的中断处理是否有什么需要特别注意的地方?
单独使能PA的多个IO口中断,中断能正常触发,程序运行也正常;
先使能PA的IO口中断,再使能PB口的PIN12中断时,PA口的中断不能触发,PB口的中断可以正常触发,但触发后,退出中断处理后,程序好象死机了。
请问 1、PA、PB是否可以同时使能IO口中断?
2、PB 12的中断处理是否有什么需要特别注意的地方?
void HAL_SleepInit(void)
{
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
GPIOA_ModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ModeIN_PU ); //初始化IO状态
GPIOA_ITModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ITMode_FallEdge ); // 设置下降沿唤醒
PFIC_EnableIRQ( GPIO_A_IRQn ); //开启GPIO中断 PA口
GPIOB_ModeCfg( GPIO_Pin_12, GPIO_ModeIN_PU ); //初始化IO状态
GPIOB_ITModeCfg( GPIO_Pin_12, GPIO_ITMode_FallEdge ); // 设置下降沿唤醒
PFIC_EnableIRQ( GPIO_B_IRQn ); //开启GPIO中断 PA口
PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE, Long_Delay );//开启GPIO唤醒使能
#if 0
sys_safe_access_enable();
R8_SLP_WAKE_CTRL |= RB_SLP_RTC_WAKE; // RTC唤醒
sys_safe_access_enable();
R8_RTC_MODE_CTRL |= RB_RTC_TRIG_EN; // 触发模式
sys_safe_access_disable(); //
PFIC_EnableIRQ(RTC_IRQn);
#endif
#endif
}
__INTERRUPT
__HIGH_CODE
void GPIOA_IRQHandler( void )
{
GPIOA_ClearITFlagBit( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13 ); //GPIO唤醒会进中断,要清除GPIO中断
}
void GPIOB_IRQHandler( void )
{
GPIOB_ClearITFlagBit( GPIO_Pin_12 ); //GPIO唤醒会进中断,要清除GPIO中断
}
从贴出的程序来看,PB中断缺少
__INTERRUPT __HIGH_CODE
应该是:
__INTERRUPT __HIGH_CODE void GPIOB_IRQHandler( void ) { GPIOB_ClearITFlagBit( GPIO_Pin_12 ); //GPIO唤醒会进中断,要清除GPIO中断 }
非常感谢您的回复,您的建议,稍后我会测试。
但PA中断为什么不会触发呢?在添加PB中断配置之前,PA中断触发、响应都是正常的
添加PB中断唤醒对PA是没有影响的,可以将代码修改后再测试看看,