我正在使用一个非常定制的非公共安全IC,它具有ARM Cortex M3内核。
如果出现hw安全违规,这个IC会触发一个NMI中断,所以它很好,我正在做我需要的任何违规行为。
但是当发生违规时,它总是一次又一次地进入NMI Handler。
我们可能需要清除中断挂起标志,但是应该直接清除它。 因为SCB-> ICSR bit31表示“进入处理程序会将此位清除为0”。
我还尝试使用NVIC_ClearPendingIRQ()清除挂起的标志,但是当NMI为-14时它不接受负的IRQ值。
我试图手动设置NVIC-> ICPR [0] =(1<<<<<<<<<<< 2>像制造商的例子(但制造商的例子重置NMI处理程序中的设备,这是不同的情况),但它不起作用。
定制IC和自定义外部事件触发通用Cortex M NMI中断并且可以是IC的特定情况但是NMI有任何限制,例如“你无法清除NMI挂起标志,你必须重置它bla bla “?
谢谢
答案 0 :(得分:1)
NMI就像其他任何中断一样。
来自Cortex-M Generic Device User Guide:
- 对于电平敏感中断,当处理器从ISR返回时,NVIC对中断信号进行采样。如果信号是 断言,中断的状态变为挂起,这可能是 使处理器立即重新进入ISR。否则, 中断状态变为无效。
- 对于脉冲中断,NVIC继续监视中断信号,如果是脉冲中断,则中断状态变为 待定和活跃。在这种情况下,当处理器从中返回时 ISR中断状态变为挂起,这可能会导致 处理器立即重新进入ISR。
这是说除非你清除产生中断请求的硬件状态,否则中断将再次挂起。
清除中断挂起状态只允许您在请求已被清除时禁用IRQ。
有关安全设备如何运作的详细信息,您需要与供应商联系。他们可能对你在这里讨论他们的产品感到不满......