首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cortex: NVIC,请演示如何通过软件使其水平或边缘检测

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

Stack Overflow用户
提问于 2011-07-22 11:10:34
回答 1查看 3.5K关注 0票数 5

我读过关于Cortex-M3 (或M0)的ARM文档,上面说它可以用作NVIC控制器中的电平敏感或脉冲(边沿)中断。问题是,如果这是由软件完成的,那么它在如何做到这一点上相当模糊。

我在NVIC中看不到任何控制中断类型的寄存器(通过调整寄存器位来选择边沿或电平)。因此,在处理程序中必须通过软件来完成一些工作,但在这个领域中仍然是模糊的。

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

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

如果这是电平检测,我可以保持中断激活并被处理程序禁用,直到被外部代码恢复,它为其重新执行中断。这就是我正在尝试做的,但如果这是脉冲检测类型,它将不起作用。

Thx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-22 12:50:24

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

  • Cortex-M3 Devices Generic User Guide,4.2.9。Level-sensitive and pulse interrupts

这很可能就是您在问题中提到的文档。姚的书“ARM Cortex-M3的最终指南”也有很好的描述。

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

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

此外,当ISR返回时(并且NVIC清除'active‘位),NIVC将重新检查中断线路的状态-如果它仍然被断言,它将再次设置挂起位(即使没有从inactive到active的转换)。这将处理中断被电平触发的情况,并且ISR没有设法使中断被解除断言(可能共享IRQ线路上的第二个设备仅在关键时刻断言其中断,因此没有中断线路处于非活动状态的时间)。

如果这是电平检测,我可以保持中断激活,并由处理程序禁用,直到被外部代码恢复,并重新执行中断。

我不确定我是否真的理解您在这里要做什么,但我认为您也许能够使用NVIC的SETENAxCLRENAx寄存器来启用/禁用中断。它们独立于挂起位工作,因此即使中断被禁用,中断也可以是挂起的(或变为挂起的)。所以你可以把处理中断的时间推迟到你想要的时间。

如果这还不够,还请注意,您只需设置相应SETPENDx寄存器中的挂起位,即可通过软件使中断挂起- CPU将引导至SETPENDx,就像硬件中断被断言一样(假设中断在SETENAx寄存器中被使能)。您也可以使用“软件触发中断寄存器”(STIR)通过软件触发中断。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6785253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档