ARM处理器的异常中断处理

ARM异常中断处理流程

中断与异常

在这里插入图片描述
CPU 在运行的过程中,也会被各种“异常”打断。这些“异常”有:

  1. 指令未定义。
  2. 指令、数据访问有问题。
  3. SWI(软中断)。
  4. 快中断。
  5. 中断。

中断也属于一种“异常”,导致中断发生的情况有很多,比如:
⚫ 按键
⚫ 定时器
⚫ ADC 转换完成
⚫ UART 发送完数据、收到数据
⚫ 等等
这些众多的“中断源”,汇集到“中断控制器”,由“中断控制器”选择优先
级最高的中断并通知 CPU。
“通过SWI异常,用户模式的应用程序可以调用系统模式下的代码”–《ARM体系结构与编程》。在Linux中,通过SWI异常为应用程序提供系统调用,从而使应用程序从用户态进入内核态。

中断的处理流程

arm 对异常(中断)处理过程:

  1. 初始化:
    a) 设置中断源,让它可以产生中断
    b) 设置中断控制器(可以屏蔽某个中断,优先级)
    c) 设置 CPU总开关(使能中断)
  2. 执行其他程序:正常程序
  3. 产生中断:比如按下按键—>中断控制器—>CPU CPU
  4. 每执行完一条指令都会检查有无中断/异常产生
  5. CPU 发现有中断/异常产生,开始处理。 对于不同的异常,跳去不同的地址执行程序。在跳转到对应异常向量地址之前还有:
    (1)保存处理器当前状态、中断屏蔽位以及各条件标志位。这是通过将当前程序状态寄存器CPSR的内容保存到将要执行的异常中断对应的SPSR寄存器中实现的,各异常中断有自己的物理SPSR寄存器。
    (2)设置CPSR中相应的位。包括设置CPSR中的位,使处理器进入相应的执行模式;设置CPSR中的位 ,禁止IRQ中断,当进入FIQ模式时,禁止FIQ中断。
    (3)将寄存器lr_mode(相应模式的LR寄存器)设置成返回地址。
    (4)将PC寄存器设置成该异常中断的中断向量地址,从而跳转到相应的异常中断处理程序处执行。
  6. 这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向 量。③④⑤都是硬件做的。
    这些函数做什么事情?
    软件做的:
    a) 保存现场(各种寄存器)
    b) 处理异常(中断):分辨中断源,再调用不同的处理函数
    c) 恢复现场
    中断处理函数调用进程切换中,保存现场即为将CPU寄存器的值入栈,用栈来保存现场、恢复现场。
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值