情况:
想在主循环中需要关闭一个EXTI一段时间。
所以想测试下是否可以用IMR屏蔽EXTI,还能保证中断不丢。
做法:
先屏蔽EXTI,一段代码后,再开启EXTI。
现象:发现中断会丢。而且如果IMR相应位为0(屏蔽该EXTI),但是PR相应位为1,那么程序会死在这个中断服务程序中。
比如:
void EXTI15_10_IRQHandler(void)//0.0375MS
{
//tempcnt1= SysTick->VAL;
if(EXTI_GetITStatus(EXTI_Line10) != RESET)
{
EXTI_ClearITPendingBit(EXTI_Line10);
test();
}
// tempcnt2= SysTick->VAL;
}
这个时候发现,程序在一直在这个中断,但是通不过if(EXTI_GetITStatus(EXTI_Line10) != RESET)这个判断,这个判断是有对PR的判断,也有对IMR的判断。
此时因为IMR是为0的。不会去清楚对于PR位。
我的判断:
中断程序程序不判断IMR位? |