无论我在哪里搜索基于级别的中断的实际实现方式,我都发现只有一个建议,即人们已经给出了该中断,即在中断进入ISR后立即将其禁用,这样就不会继续触发它。
我读过的另一件事是,它用于创建循环,即只要存在中断即可为ISR服务,但可以使用while
or do while
循环来实现。
级别边缘中断将提供的优势可能是在服务ISR和延迟之间运行主程序的一条指令。我猜。
那么,在理解电平边缘中断时我缺少什么吗?
一个很好的答案是向我展示基于级别的中断的某种实际用法。
无论我在哪里搜索基于级别的中断的实际实现方式,我都发现只有一个建议,即人们已经给出了该中断,即在中断进入ISR后立即将其禁用,这样就不会继续触发它。
我读过的另一件事是,它用于创建循环,即只要存在中断即可为ISR服务,但可以使用while
or do while
循环来实现。
级别边缘中断将提供的优势可能是在服务ISR和延迟之间运行主程序的一条指令。我猜。
那么,在理解电平边缘中断时我缺少什么吗?
一个很好的答案是向我展示基于级别的中断的某种实际用法。
Answers:
基于级别的中断可以安全,轻松,可靠地共享和级联;相反,可靠地共享边沿触发的中断通常很困难,有时甚至是不可能的。
使用基于级别的中断时,中断处理程序可以简单地依次询问每个可能的中断源“您是否需要注意”,如果需要,可以对其进行服务。完成后,处理程序可以返回。如果在顺序的较早时间轮询的中断源决定在服务较晚的中断源时需要注意,则处理器将注意到IRQ引脚仍处于活动状态并重新触发中断处理程序,从而允许较晚到达的中断被服务。
当使用非级联的边沿触发中断时,事情变得更加复杂。中断处理程序经过处理并为每个人提供服务后,它必须进行遍历并重新轮询每个人,以查明先前轮询的设备是否已决定需要服务。只有在每个设备连续报告不需要服务之后,中断返回才是安全的。请注意,如果需要服务的设备保持其“需要服务”指示处于活动状态,则在设备需要服务时从中断处理程序返回可能使该中断永久无效。
I / O引脚具有一些边沿捕获逻辑可能很有用,当边沿到达时,该逻辑会设置锁存器并输出“需要服务”指示,直到软件将其清除为止。这样的事情可能会在前端作为边缘敏感的中断出现。但是,在任何下游点,最好让中断逻辑要求在不满足任何上游点的情况下始终服务于中断。
基于级别的中断有用的一种明显情况是,当代码开始监视信号时,信号已经处于该状态。
让我们考虑一个典型的例子...
信号:“ Case_Over_Temperature”当盒子中的环境温度对于正常操作而言过高时变低。
显然,此信号随时可能变低,这可能是因为我们发热量过多,或者是因为盒子安装在高温的地方。
显然,在加电时,该线路可能处于任一状态。现在,让我们假设上电代码不仅看起来像而是依靠中断。如果中断是边沿触发的并且信号已经为低,则当启用中断时,将不会执行适当的代码。电平敏感的中断在这里是谨慎的。
同样,如果处理器进入睡眠状态且未设置为在该中断时唤醒,则该线随时可能变为低电平。当发生任何其他唤醒时,您希望当时触发该中断。
确实,可以说,随着睡眠模式处理器的普及,基于级别的中断变得更加有用。
但是,与所有与代码相关的事物一样,“皮肤猫”总是有不止一种方法。如果您不使用基于级别的,则唤醒代码需要对中断针进行轮询,如果处理器没有将它们自动排队。
显然,级别触发还带有它自己的一系列问题,因为代码必须知道已经处理了条件等来进行处理。
这又是另一回事:为什么您可以进行更简单的电平触发,为什么会有尴尬的边沿触发中断呢?
边沿触发的中断更容易受到噪声尖峰的影响,并且更难以过滤。这样一来,他们冒着跑板外或上电缆的风险。中断不能由源撤回。
电平触发的中断一直持续到CPU确认源为止。因此,有充分的握手基础。CPU几乎可以采用任何所需的方式将噪声从中断信号中滤除,这只是增加了中断响应时间。如果应用需要并允许对信号进行良好滤波,则电平触发是可调整的。
我首先看到用于Z80和6502等CPU上的NMI的边沿触发中断,而可屏蔽中断则使用级别触发。NMI使用边缘触发只是为了阻止卡住的引脚或卡住的驱动电路,以防止CPU永远重新进入NMI ISR。NMI必须显示活动以获得另一个。
答案当然是它们都有自己的应用程序。但是级别触发是起点,而边缘触发则是因为有特殊情况。
基于级别的ISR支持Ack / Nak,当您有许多来源时,此功能很有用。
如果您在软件和外部硬件中都有许多ISR和许多优先级,并具有优先级。
如果所有源都是边沿“或”,则仍然必须轮询每个源以找到哪个源集,然后清除中断。
因此,边缘和级别在不同的体系结构中都具有优势。
为避免丢失边缘IRQ,必须启用它,然后在ISR结束后立即对其进行测试。
某些级别的IRQ可以比ISR持续更长的时间,并且可以预期地被检测到。
当使用“共线”以及漏极开路或集电极开路时,电平操作模式更有意义。
在这种情况下,该行上的每个“参与方”在需要“服务”时都会激活其输出。当中断处理软件退出并依次轮询(然后处理)聚会线路上的每个设备时,这些设备将释放其保持状态并变为非活动状态。最终,不再有其他(级别)中断,中断线本身变为非活动状态,并且处理中断的软件再次变为“静态”。