ARM中断分析之五:按怎样的顺序清理中断的PND位才安全?

按怎样的顺序清理中断的PND位才安全?

    下面是一款ARM芯片的一个中断控制器的寄存器图,涉及中断PND位的寄存器有“EINTPEND、SRCPND、INTPND”,另外外设控制器或外设芯片内也有PND相关的寄存器(这里称为:DevPND),既然有多级PND位,所以清理PND位的时候有个先后次序,而且这个顺序还不能搞错,搞错就会造成系统不稳定。


    在程序里面,当中断服务程序处理完外设中断后,就需要清零PND,以便接收设备下一次中断,如下代码所示:

//

// 清除中断标志
rEINTPEND = (1<<4); // 清除第二级的中断标识
rSRCPND = (1<<4); // 清除第一级的中断标识
rINTPND = rINTPND; // 清除mask过滤后的中断标识

因为产生中断的方式可以是电平触发,也可以是边缘触发,而这两者的清零PND顺序是有所不同的,这篇文章就是介绍如何清零PND,为什么要那样做。

略。。。以后补充。

结论是:
清零操作按照顺序分为两种,分别是:
1. 先清外设中断,再清中断控制器的中断。
2. 先清中断控制器的中断,再清外设中断。
第1种适用于电平触发,若是边缘触发则有可能造成掉失中断。
第2种适用于边缘触发,若是电平触发则有可能重复处理中断。

 

 

posted @ 2012-05-14 17:44  yfm1202  阅读(969)  评论(0编辑  收藏  举报