首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM中的嵌套中断处理

ARM中的嵌套中断处理
EN

Stack Overflow用户
提问于 2014-04-27 21:35:47
回答 1查看 3.7K关注 0票数 4

下面是Cortex A Prog Guide中提到的流程,我对文本有几个问题。

因此,可重入中断处理程序在引发IRQ异常并以前面描述的方式将控制权转移到中断处理程序之后,必须执行以下步骤。

·中断处理程序保存被中断程序的上下文(即,它将被处理程序损坏的任何寄存器推送到备用内核模式堆栈上,包括返回地址和SPSR_IRQ)。

代码语言:javascript
复制
Q> What is the alternative kernel mode stack here ?

·确定需要处理哪个中断源,并清除外部硬件中的中断源(防止其立即触发另一个中断)。

·中断处理程序将处理器更改为其他内核模式,并保留CPSR I位设置(中断仍处于禁用状态)。

代码语言:javascript
复制
Q> From IRQ to SVC mode with CPSR.I =1 . Right ?

·中断处理程序将异常返回地址保存在堆栈(新模式的堆栈,位于内核内存中)上,并重新启用中断。

代码语言:javascript
复制
Q> Are there 2 stacks here ?

·它为原始中断调用适当的C处理程序(中断仍被禁用)。

·完成后,中断处理程序禁用IRQ并从堆栈中弹出异常返回地址。

·它直接从备用内核模式堆栈恢复被中断程序的上下文。这包括恢复PC和切换回先前执行模式的CPSR。

代码语言:javascript
复制
Q> How is the nesting done here ? I am bit confused here...
EN

回答 1

Stack Overflow用户

发布于 2015-02-07 07:16:47

1)你说了算,真的。要求是它是不能异步调用的。因此,您可以使用系统模式堆栈,它与用户模式共享-具有一些有趣的含义。或者,您可以使用Supervisor模式堆栈,只要在执行SVC指令之前始终正确存储所有上下文。

2)可以。

3)是的,对于在(1)中选择的模式,您可以将上下文存储在堆栈中。

4)在备用模式下执行时,重新启用中断(如您的文本所述)。此时,处理器将对发送给内核的新中断做出反应--通常是中断控制器中配置的优先级更高的中断。

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

https://stackoverflow.com/questions/23324084

复制
相关文章

相似问题

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