当前位置:首页 > 问问

为什么进入一次外部中断就不行 外部中断为何只能进入一次?

为什么进入一次外部中断就不行

在嵌入式系统中,使用中断可以充分利用处理器的时间。但是,有时可能会遇到进入一次外部中断后无法再次进入中断的情况。下面从几个方面详细阐述这个问题。

中断嵌套优先级

当一个中断正在处理时,如果在这个中断处理期间内又产生了一个中断请求,那么新中断请求可能会等待,直到旧的中断处理完毕后再进行处理。这个等待的过程就叫做中断嵌套。在处理中断嵌套的时候,需要根据中断请求的优先级来判断是否触发中断处理函数。如果在处理低优先级中断的时候,又产生了高优先级中断的请求,那么高优先级中断的请求会打断当前正在处理的低优先级中断,直接进入中断处理函数。但如果产生了低优先级的中断请求,而它的优先级又比当前正在处理的中断优先级高,那么该中断的请求会被挂起,等待当前中断处理完毕之后才会进入处理程序。如果在这段时间内新的中断请求进入,那么新的中断请求也会被挂起。

因此,在中断嵌套优先级的处理过程中,如果低优先级的中断请求被挂起,那么直到当前中断处理完成后才会得到处理,此时可能会出现高优先级的中断请求被“抢占”的情况,导致低优先级中断请求的无法立即处理的情况。

中断屏蔽

当处理器正在执行中断处理函数时,会对所有中断进行屏蔽,即所有中断请求都会被拒绝,直到当前中断处理函数执行完毕才会重新开启中断。如果此时出现了新的外部中断请求,处理器无法响应,就会出现无法进入外部中断的情况。

此外,一些外设的中断信号可能是共享的,也就是说多个设备在同一时间内产生中断请求,但只有一个中断信号线,处理器再处理中断信号时需要根据外设的优先级来决定哪一个设备的中断请求被响应,如果此时该设备的中断请求被屏蔽,那么该设备就无法发出中断信号,导致无法进入外部中断。

中断服务例程(ISR)时间过长

中断服务例程是中断处理程序的一部分,通常用于读取和处理中断源提供的信息。如果 ISR 的时间过长,就会影响其他函数的执行。而在进入 ISR 时,中断信号线会被关闭,防止其他设备产生中断请求,所以中断服务例程的执行时间必须尽量短,否则可能会无法响应外部中断,造成外设故障。

解决此问题可以采用两个以上的中断处理级别,当一个中断处理优先级过高时,可以将 ISR 拆分成多个部分,分别执行,这样在当前中断响应之前,其他低优先级的中断还是可以得到响应。

声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信

相关文章