ARM微处理器的编程模型之:异常中断处理
当未定义异常发生时,系统执行下列的伪操作。 r14_und = address of next instruction after the undefined instruction SPSR_und = CPSR CPSR[4∶0] = 0b11011 /*进入未定义指令模式*/ CPSR[5] = 0 /*处理器进入ARM状态*/ /*CPSR[6]保持不变*/ CPSR[7] = 1 /*禁止外设中断*/ If high vectors configured then PC = 0xffff0004 Else PC = 0x00000004 软中断异常发生时,处理器进入特权模式,执行一些特权模式下的操作系统功能。软中断异常发生时,处理器执行下列伪操作。 r14_svc = address of next instruction after the SWI instruction SPSR_und = CPSR CPSR[4∶0] = 0b10011 /*进入特权模式*/ CPSR[5] = 0 /*处理器进入ARM状态*/ /*CPSR[6]保持不变*/ CPSR[7] = 1 /*禁止外设中断*/ If high vectors configured then PC = 0xffff0008 Else PC = 0x00000008 预取指令异常使由系统存储器报告的。当处理器试图去取一条被标记为预取无效的指令时,发生预取异常。 如果系统中不包含MMU时,指令预取异常中断处理程序只是简单地报告错误并退出。若包含MMU,引起异常的指令的物理地址被存储到内存中。 预取异常发生时,处理器执行下列伪操作。 r14_svc = address of the aborted instruction + 4 SPSR_und = CPSR CPSR[4∶0] = 0b10111 /*进入特权模式*/ CPSR[5] = 0 /*处理器进入ARM状态*/ /*CPSR[6]保持不变*/ CPSR[7] = 1 /*禁止外设中断*/ If high vectors configured then PC = 0xffff000C Else PC = 0x0000000C 数据访问中止异常是由存储器发出数据中止信号,它由存储器访问指令Load/Store产生。当数据访问指令的目标地址不存在或者该地址不允许当前指令访问时,处理器产生数据访问中止异常。 当数据访问中止异常发生时,处理器执行下列伪操作。 r14_abt = address of the aborted instruction + 8 SPSR_abt = CPSR CPSR[4∶0] = 0b10111 CPSR[5] = 0 /*CPSR[6]保持不变*/ CPSR[7] = 1 /*禁止外设中断*/ If high vectors configured then PC = 0xffff000C10 Else PC = 0x00000010 当数据访问中止异常发生时,寄存器的值将根据以下规则进行修改。 ① 返回地址寄存器r14的值只与发生数据异常的指令地址有关,与PC值无关。 ② 如果指令中没有指定基址寄存器回写,则基址寄存器的值不变。 ③ 如果指令中指定了基址寄存器回写,则寄存器的值和具体芯片的Abort Models有关,由芯片的生产商指定。 ④ 如果指令只加载一个通用寄存器的值,则通用寄存器的值不变。 ⑤ 如果是批量加载指令,则寄存器中的值是不可预知的值。 ⑥ 如果指令加载协处理器寄存器的值,则被加载寄存器的值不可预知。 当处理器的外部中断请求引脚有效,而且CPSR寄存器的I控制位被清除时,处理器产生外部中断IRQ异常。系统中各外部设备通常通过该异常中断请求处理器服务。 当外部中断IRQ发生时,处理器执行下列伪操作。 r14_irq = address of next instruction to be executed + 4 SPSR_irq = CPSR CPSR[4∶0] = 0b10010 /*进入特权模式*/ CPSR[5] = 0 /*处理器进入ARM状态*/ /*CPSR[6]保持不变*/ CPSR[7] = 1 /*禁止外设中断*/ If high vectors configured then PC = 0xffff0018 Else PC = 0x00000018 当处理器的快速中断请求引脚有效且CPSR寄存器的F控制位被清除时,处理器产生快速中断请求FIQ异常。 当快速中断异常发生时,处理器执行下列伪操作。 r14_fiq = address of next instruction to be executed + 4 SPSR_fiq = CPSR CPSR[4∶0] = 0b10001 /*进入FIQ模式*/ CPSR[5] = 0 CPSR[6] = 1 CPSR[7] = 1 If high vectors configured then PC= 0xffff001c Else PC = 0x0000001c 每一种异常按表3.5中设置的优先级得到处理。 表3.5 异常优先级 优 先 级 异 常 最高 1 复位异常 2 数据中止 3 快速中断请求 4 中断请求 5 预取指令异常 6 软件中断 最低 7 未定义指令 异常可以同时发生,处理器按表3.5的优先级顺序处理异常。例如,复位异常的优先级最高,处理器上电时发生复位异常。所以当产生复位时,它将优先于其他异常得到处理。同样,当一个数据访问中止异常发生时,它将优先于除复位异常外的其他所有异常。 优先级最低的2种异常是软件中断和未定义指令异常。因为正在执行的指令不可能既是一条SWI指令,又是一条未定义指令,所以软件中断异常SWI和未定义指令异享有相同的优先级。 每一种异常都会导致内核进入一种特定的模式。表3.6显示了ARM处理器异常及其对应的模式。3.软中断SWI
4.预取指令异常
5.数据访问中止异常
6.外部中断IRQ
7.快速中断FIQ
3.4.2 异常优先级
3.4.3 处理器模式和异常
微处理器 异常中断处理 ARM 复位异常 数据异常 相关文章:
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)