一、 arm的七种异常源 1)FIQ 硬件请求的快速中断 2)IRQ 硬件请求的外部中断 3)RESET 复位按键 4)software interrupe 执行程序时产生的中断 5)DATA Abort 数据访问异常(变量地址不对或不允许被访问) 6)prefetch Abort 读取指令的时候异常(指令不允许访问或其他问题) 7)undefined instruction 已经读取到指令但是这个指令CPU不认识
七种异常源对应进入的模式 异常处理、 二、 ARM产生异常后的动作(arm 自己会做,不需要我们做,我们了解arm是怎么做的) 1)将CPSR的的内容拷贝 到对应异常模式下的SPSR_mod中 /CPSR是当前状态寄存器 保存着当前处理器遇到异常前的状态 保存在SPSR中,方便跳转之后回到正常的的工作状态(mod 为对应的异常模式eg :SPSR_fiq)/ 2,修改CPSR的值 1)、修改中断禁止为禁止相应中断(不再响应同等优先级或低优先级的中断请求)设置位为图中I 位或F位 2)、修改模式位进入对应的模式状态(修改位数为M0~M4) 3)、修改状态位为arm状态(无论之前为什么状态ARM或thumb 执行异常必须进入ARM状态) 3、 保存返回地址到对应模式下的LR_mode(异常出现时LR自动保存当前程序的下一段的地址)//LR 就是R14 4、 设置PC的值让它跳到相应的异常向量表中。(异常向量表) //异常向量表(32Baty//每个异常4字节) 2、异常返回 异常返回不像异常处理一样处理器自己完成,异常返回需要自己手动完成 首先异常处理程序的自己写 CPSR=SPSR; PC=LR; 3、 异常优先级 reset(复位) data abort (数据读取异常) FIQ(快速中断) IRQ(外部中断) prefetch abort (指令读取异常) software interrupt(软中断) undefine instruction (指令未定义)
三、指令流水线、多核、时间片。
|