gpt4 book ai didi

Cortex : NVIC,请演示如何通过软件使其电平或边缘检测

转载 作者:太空狗 更新时间:2023-10-29 15:27:31 25 4
gpt4 key购买 nike

我已经阅读了有关 Cortex-M3(或 M0)的 ARM 文档,它说它可以用作 NVIC Controller 内的电平感应或脉冲(边沿)中断。问题是,如果这是通过软件完成的,那么如何做到这一点相当模糊。

我没有看到 NVIC 中有任何类型的寄存器或控制中断类型的寄存器(通过调整寄存器位来选择边沿或电平)。所以某些事情必须由处理程序中的软件完成,但在这个领域又很模糊。

我喜欢听到任何人有办法通过软件使其边缘或电平触发中断。

请在处理程序代码(如果此控制它)中演示如何检测电平或脉冲。

如果这是电平检测,我可以保持中断处于事件状态并由处理程序禁用,直到通过外部代码恢复,它会重新执行中断。这就是我想要做的,但如果这是脉冲检测类型,它将无法工作。

谢谢

最佳答案

可在此处找到描述 Cortex-M3 NIVC 如何处理电平或边沿(脉冲)触发中断的文档:

这很可能就是您在问题中提到的文件。 Joseph Yiu 的书“The Definitive Guide to the ARM Cortex-M3”也有很好的描述。

对于这两种中断信号类型,NVIC 没有特定的配置 - 它可以处理任何一种。本质上,当中断被断言(基于电平或边沿触发)时,NVIC 将该状态锁存在 SETPENDx 寄存器中。当该中断的 ISR 被引导至时,ACTIVEx 寄存器中的相应位将被设置,而 SETPENDx 寄存器中的位将被清除。

当中断处于事件状态时,如果中断线从非事件状态转换为事件状态,挂起位将再次打开,并且在从当前事件的 ISR 实例返回时,将再次处理中断。这会处理边沿触发的中断情况。

此外,当 ISR 返回(并且 NVIC 清除“事件”位)时,NIVC 将重新检查中断线的状态 - 如果它仍然有效,它将再次设置挂起位(即使没有是从不活跃到活跃的转变)。这处理了中断是电平触发的情况,并且 ISR 没有设法使中断被取消断言(也许共享 IRQ 线上的第二个设备在关键时刻断言了它的中断,所以没有时间当中断线处于非事件状态时)。

If this is level detect, I can hold interrupt active and disable by the handler, until restore by external code for which it re-execute the interrupt.

我不确定我是否真的理解你在这里的目的,但我认为你可以使用 NVIC 的 SETENAxCLRENAx 来做你想做的事> 注册以启用/禁用中断。它们独立于挂起位工作,因此即使中断被禁用,中断也可以挂起(或变为挂起)。因此,您可以根据需要延迟处理中断。

如果这还不够,另请注意,您可以通过软件将中断挂起,只需在相应的 SETPENDx 寄存器中设置挂起位 - CPU 将指向 ISR,就好像断言了硬件中断(假设在 SETENAx 寄存器中启用了中断)。您还可以使用“软件触发中断寄存器”(STIR) 通过软件触发中断。

关于Cortex : NVIC,请演示如何通过软件使其电平或边缘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com