打印

关于EXTI的IMR和PR

[复制链接]
3808|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

粉丝