Linux 中断子系统(八):中断处理流程

1、上层中断处理

系统初始化时,已经建立起 硬件中断号 和 软件中断号的 映射表

中断注册时,我们需要先从设备树中获取硬件中断号,然后调用 API 将硬件中断号转换为软件中断号,根据软件终端号 irq 找到对应的 irq_desc,并将中断处理函数添加到 irq_desc 中(也就是 irqaction 结构体中)。

当中断发生,根据硬件中断号通过 irq_domian 翻译成软件中断号 irq number,找到对应的 irq_desc,并最终调用到中断处理函数,处理完成恢复现场。

2、ARM 底层中断处理

1、保存中断发生时 CPSR 寄存器的内容到 SPSR_irq 寄存器中

2、修改 CPSR 寄存器,让 CPU 进入处理器模式中的 IRQ 模式,即 CPSR 寄存器中的 M 域设置为 IRQ Mode

3、硬件自动关闭中断 IRQ 或 FIQ,即 CPSR 中的 IRQ 位或 FIQ 位置 1

4、保存返回地址到 LR_irq 寄存器中

5、硬件自动跳转到中断向量表的 IRQ 向量中,后续动作都是软件行为 —–>

中断返回时,软件需要实现以下两个操作

1、从 SPSR_irq 寄存器中恢复数据到 CPSR 中

2、从 LR_irq 中回复内容到 PC 中,从而返回到中断点的下一个指令处执行。

CPSR 寄存器

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式Linux系统开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值