ARM Cortex M NonMaskable 中断也是 NonClearable 吗?

ARM Cortex M NonMaskable Interrupt is NonClearable also?

我正在使用非常定制的而不是 public 具有 ARM Cortex M3 内核的安全 IC。

在硬件安全违规的情况下,该 IC 会触发 NMI 中断,所以没关系,我正在做任何我需要的违规行为。

但是当发生违规时,它总是一次又一次地进入NMI Handler。

我们可能需要清除不确定的中断挂起标志,但应该直接清除它。 因为 SCB->ICSR bit31 表示 "entering the handler clears this bit to 0"。

我还尝试使用 NVIC_ClearPendingIRQ() 清除挂起标志,但当 NMI 为 -14 时它不接受负 IRQ 值。

我尝试手动设置 NVIC->ICPR[0] = (1 << 2);就像制造商示例一样(但制造商示例在 NMI 处理程序中重置设备,这是不同的情况)但它不起作用。

触发通用 Cortex M NMI 中断的是自定义 IC 和自定义外部事件,可能是 IC 的特定情况,但 NMI 是否有任何限制,例如 "you can not clear NMI pending flag and you have to reset it bla bla"?

谢谢

NMI 在这里的行为与任何其他中断一样。

来自Cortex-M Generic Device User Guide

  • For a level-sensitive interrupt, when the processor returns from the ISR, the NVIC samples the interrupt signal. If the signal is asserted, the state of the interrupt changes to pending, which might cause the processor to immediately re-enter the ISR. Otherwise, the state of the interrupt changes to inactive.
  • For a pulse interrupt, the NVIC continues to monitor the interrupt signal, and if this is pulsed the state of the interrupt changes to pending and active. In this case, when the processor returns from the ISR the state of the interrupt changes to pending, which might cause the processor to immediately re-enter the ISR.

这意味着除非您清除生成中断请求的硬件状态,否则中断将再次挂起。

清除中断挂起状态仅允许您在请求已被清除时禁用 IRQ。

有关您的安全设备如何运行的详细信息,您需要咨询您的供应商。他们可能对您在这里讨论他们的产品不满意...