关于EXTI的IMR和PR

[复制链接]
4152|1
 楼主| JD21IC 发表于 2012-5-21 10:52 | 显示全部楼层 |阅读模式
TI, ST, TE, se, pc
情况:
     想在主循环中需要关闭一个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位?
 楼主| JD21IC 发表于 2012-5-21 11:19 | 显示全部楼层
实验出来了,貌似可以用NVIC的初始化程序来关闭。但是不知道是否会丢中断。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部