中断输入和悬起行为也适用于NMI,只是NMI会立即无条件执行,除了特殊情况:若当前已经在执行NMI服务例程,或者CPU被调试器停止,或者被一些严重的系统错误锁定,则新的NMI请求也将悬起。中断悬起示意图如图3.34所示。
图3.34 中断悬起示意图
当中断输入脚有中断信号输入,该中断就被悬起。即使后来中断源取消了中断请求,已经被标记成悬起的中断也被记录了下来。到了系统中它的优先级最高时,就会得到响应。但是,如果在某个中断得到响应之前,其悬起状态被清除了(例如,在PRIMASK或FAULTMASK置位时软件清除了悬起状态标志),则中断被取消,如图3.35所示。
图3.35 中断在得到处理器响应之前被清除悬起状态
当某中断的服务例程开始执行时,就称此中断进入了“活跃”状态,并且其悬起位会被硬件自动清除,如图3.36所示。在一个中断活跃后,直到其服务例程执行完毕,并且返回(也称为中断退出)了,才能对该中断的新请求予以响应。当然,新请求的响应也是由硬件自动清零悬起标志位。中断服务例程也可以在执行过程中把自己对应的中断重新悬起(但是使用时要注意避免进入“死循环”)。
如果中断源一直保持中断请求信号,该中断就会在其上次服务例程返回后再次被置为悬起状态,如图3.37所示。这一点Cortex-M3和传统的ARM7TDMI是相同的。(www.xing528.com)
另一方面,如果某个中断在得到响应之前,其请求信号以若干的脉冲的方式呈现,则被视为只有一次中断请求,多出的请求脉冲全部错失——这是中断请求太快,以致超出处理器反应限度的情况,如图3.38所示。
图3.36 在处理器进入服务例程后对中断活跃状态的设置
图3.37 一直维持的中断请求导致服务例程返回后再次悬起该中断
如果在服务例程执行时,中断请求释放了,但是在服务例程返回前又重新被置为有效,则Cortex-M3会记住此动作,重新悬起该中断,如图3.39所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。