第9章 中断体系结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/o_rdwr/article/details/82221784

ARM体系的CPU有以下7种工作模式

  • 用户模式(usr):ARM处理器正常的程序执行状态
  • 快速中断模式(fiq):用于高速数据传输或通道处理
  • 中断模式(irq):用于通用的中断处理
  • 管理模式(svc):操作系统使用的保护模式
  • 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及储存保护
  • 系统模式(sys):运行具有特权的操作系统任务
  • 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真

快速中断模式有7个备份寄存器R8~R14

异常发生(CPU自动完成)

  1. 在异常工作模式的连接寄存器R14中保存前一个工作模式的下一条,即将执行的指令的地址。对于ARM状态,这个值是当前PC值加4或加8
  2. 将CPSR的值复制到异常模式的SPSR
  3. 将CPSR的工作模式位设为这个异常对应的工作模式
  4. 令PC值等于这个异常模式在异常向量表中的地址,即跳转去执行向量表中的响应指令

异常退出(CPU自动完成)

  1. 前面进入异常工作模式时,连接寄存器中保存了前一工作模式的一个指令地址,将它减去一个适当的值后赋给PC寄存器
  2. 将SPSR的值复制回CPSR
异常模式 退出异常模式时PC的计算方法 进入异常模式时R14中保存的值
管理模式(通过SWI指令进入) movs pc, r14 PC + 4 (1)
未定义指令终止模式 movs pc, r14 PC + 4 (1)
快速中断模式 subs pc, r14, #4 PC + 4 (2)
中断模式 subs pc, r14, #4 PC + 4 (2)
数据访问终止模式 异常原因:指令预取终止
subs pc, #4
异常原因:数据访问终止
subs pc, r14, #8
PC + 8 (3)

1. PC值是这些指令的地址:SWI、未定义的指令、在预取指时就失败的指令
2. PC值是这些指令的地址:进入快速中断模式、中断模式前,被打断而未执行的指令
3. PC值是这些指令的地址:导致数据访问终止的加载/存储指令

中断控制器

  1. 查询方式:程序循环地查询各设备的状态并作出相应反应
  2. 中断方式:当某时间发生时,硬件会设置某个寄存器

中断处理流程

  1. 中断控制器汇集各类外设发出的中断信号,然后告诉CPU
  2. CPU保存当前程序的运行环境(各个寄存器等),调用中断服务程序(ISR,Interrupt Service Routine)来处理这些中断
  3. 在ISR中通过读取中断控制器、外设的相关寄存器来识别这是哪个中断,并进行相应的处理
  4. 清除中断,通过读写中断控制器和外设的相关寄存器来实现
  5. 最后恢复被中断程序的运行环境(即上面保存的各个寄存器等),继续执行

猜你喜欢

转载自blog.csdn.net/o_rdwr/article/details/82221784