ARM异常及中断处理介绍(中断是异常的一种)

谁都会走 提交于 2019-12-18 02:27:03

中断

概念:是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。

中断源

概念:可以引起中断的信号源。

异常优先级

ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取异常(Prefetch Abort)、软中断异常(SWI)、未定义指令异常(Undefined interrupt)。
优先级最低的两种异常是软件中断异常和未定义指令异常。因为正在执行的指令不可能既是一条软中断指令,又是一条未定义指令,所以软中断异常和未定义指令异常享有相同的优先级。

注意

在ARM处理器中(Exception)和中断(Interrupt)有些差别,异常主要是从处理器被动接受异常的角度出发,而中断带有向处理器主动申请的色彩。此文中对“异常”和“中断”不做严格区分;两者都是指请求处理器打断正常的程序执行流程,进入特定程序循环的一种机制。

异常

概念:异常由内部或外部源产生并引起处理器处理一个事件。在处理异常之前,处理器状态必须保留,一遍在异常处理程序完成后,原来的程序能够重新执行。同一时刻可能出现多个异常。
注意

  • 当异常出现时,异常模式分组的R14和SPSR用于保存状态。
  • 当处理异常返回时,把SPSR传送到CPSR,R14传送到PC。

异常向量表

概念:当异常发生时,处理器会把PC设置为一个特定的存储器地址(强制从异常类型对应的固定存储地址开始执行程序)。用来记录哪种异常对应哪个地址的表。
特点

  • 就是一块内存空间,大小为32bytes,平均被分成了8份,每一份对应一个异常源,其中有一份是预留的;
  • 在异常向量表中的每一份存放的是一个跳转指令,跳转到对应的异常处理函数;
  • 异常向量表中每一份的位置是固定的,不能更改;
  • 一般情况下,像启动程序(uboot)起始位置就是异常向量表;
    在这里插入图片描述

1.复位异常

概述:当处理器的复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序执行。复位异常中断通常用于系统上电和系统复位两种情况。
复位异常中断处理程序的功能

  • 设置异常中断向量表;
  • 初始化数据栈和寄存器;
  • 初始化存储系统,如系统中的MMU等;
  • 初始化关键的I/O设备;
  • 使能中断;
  • 处理器切换到合适模式;
  • 初始化C变量,跳转到应用程序执行;

2.未定义指令异常

概述:当ARM处理器执行协处理器指令时,它必须等待一个外部协处理器应答后,才能真正执行这条指令。若协处理器没有响应,则发生未定义指令异常。若试图执行未定义指令,也会出现未定义指令异常。未定义指令异常可用于在没有物理协处理器的系统上,对协处理器进行软件仿真,或通过软件仿真实现指令集扩展。

3.软中断异常

概述:软件中断异常指令SWI进入特权模式,执行一些特权模式下的操作系统功能。

4.预取异常

概述:预取异常是由系统存储器报告的。当处理器试图去取一条被标记为预取无效的指令时,发生预取异常。如果系统中不包含MMU,指令预取异常中断处理程序只是简单地报告错误并退出;若包含MMU,引起异常的指令的物理地址被存储到内存中。

5.数据异常

概述:数据异常时由存储器发出数据中止信号,它由存储器访问指令Load/Store产生。当数据访问指令的目标地址不存在或者该地址不允许当前指令访问时,处理器产生数据访问中止异常。

6.外部中断异常

概述:当处理器的外部中断请求引脚有效,并且CPSR寄存器的I控制位被清除时,处理器产生外部中断异常。系统中各外部设备通常通过该异常中断请求处理器服务。

7.快速中断异常

概述:当处理器的快速中断请求引脚有效且CPSR寄存器的F控制位被清除时,处理器产生快速中断异常。

ARM处理器模式和异常

在这里插入图片描述

中断响应

步骤

  1. 保护断点,即保存下一个将要执行的指令的地址,就是把这个地址送入堆栈;
  2. 寻找中断入口,根据不同的中断源所产生的的中断,查找不同的入口地址;
  3. 执行中断处理程序;
  4. 中断返回,执行完中断指令后,就从中断处返回到主程序,继续执行;
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!