ARM的七种运行模式:
User: 非特权模式,一般大多数任务运行在这个模式下。FIQ: 快速中断模式,当高优先级中断(fast-快速中断)发生时进入。RQ: 正常中断模式,当低优先级中断(normal –正常中断)发生时进入。Supervisor: 管理模式,当处理器复位或软中断指令执行时进入,操作系统内核通常处于这种模式。Abort: 中止模式,当处理器访问存储器失败时(memory access violations)进入。Undef: 未定义模式,当处理遇到没有定义的指令或处理器不支持的指令时进入。System: 系统模式,是一种特殊的用户模式-使用与用户模式完全一样的寄存器,允许对cpsr的完全读/写访问。
arm异常处理方式:
1、异常出现的原因:(1)指令执行引起的异常:软件中断、未定义指令(包括所要求的协处理器不存在对于协处理器指令)、预取址中止(存储器故障)、数据中止。
(2) 外部产生的中断:复位、FIQ、IRQ。
2、异常的种类:
(1)、复位(RESET)
a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
b、通过设置PC跳转到复位中断向量处执行称为软复位。
(2)、未定义的指令
当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
(3)、软件中断
这是一个由用户定义的中断指令(SWI)。该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制实现系统功能调用。
(4)、指令预取终止(Prefech Abort)
如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
(5)、数据访问终止(DATAABORT)
如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
(6)、外部中断请求(IRQ)
当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设通过该异常中断请求处理服务。
(7)、快速中断请求(FIQ)
当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。
3、出现异常后CPU自动处理的过程:(1)拷贝CPSR到SPSR_<mode>
(2)设置适当的CPSR位: 改变处理器状态进入ARM状态;改变处理器模式进入相应的异常模式;设置中断禁止位禁止相应中断
(3)更新LR_<mode>,这个寄存器中保存的是异常返回时的链接地址
(4)设置PC到相应的异常向量
异常向量表:http://blog.chinaunix.net/attachment/201205/23/20937170_1337783710UPK1.jpg
4、异常中断处理后返回: (1)、将所有修改过的用户寄存器从处理程序的保护栈中恢复。
(2)、将SPSR复制回CPSR中,将连接寄存器LR的值减去相应的偏移量后送到PC中。
(3)、若在进入异常处理时设置了中断禁止位,要在此清除。
复位异常处理程序不需要返回。
寄存器的组织方式:user:r0~r12,r13(sp),r14(lr),r15(pc),cpsr
fiq:r0~r7,r15,cpsr,改变(r8~r14),增加(spsr)
irq:改变(r13,r14),增加(spsr)
svc:改变(r13,r14),增加(spsr)
abort:改变(r13,r14),增加(spsr)
undef:改变(r13,r14),增加(spsr)
程序状态寄存器 条件标志 ... 禁止中断 状态 处理器模式
cpsr N(符号) Z(零) C(进位) V(溢出) ... I F 0(arm) 1(thumb) 0000 0001 0010 0011 0111 1011 1111
user fiq irq svc abort undef sys
User: 非特权模式,一般大多数任务运行在这个模式下。FIQ: 快速中断模式,当高优先级中断(fast-快速中断)发生时进入。RQ: 正常中断模式,当低优先级中断(normal –正常中断)发生时进入。Supervisor: 管理模式,当处理器复位或软中断指令执行时进入,操作系统内核通常处于这种模式。Abort: 中止模式,当处理器访问存储器失败时(memory access violations)进入。Undef: 未定义模式,当处理遇到没有定义的指令或处理器不支持的指令时进入。System: 系统模式,是一种特殊的用户模式-使用与用户模式完全一样的寄存器,允许对cpsr的完全读/写访问。
arm异常处理方式:
1、异常出现的原因:(1)指令执行引起的异常:软件中断、未定义指令(包括所要求的协处理器不存在对于协处理器指令)、预取址中止(存储器故障)、数据中止。
(2) 外部产生的中断:复位、FIQ、IRQ。
2、异常的种类:
(1)、复位(RESET)
a、当处理器复位引脚有效时,系统产生复位异常中断,程序跳转到复位异常中断处理程序处执行,包括系统加电和系统复位。
b、通过设置PC跳转到复位中断向量处执行称为软复位。
(2)、未定义的指令
当ARM处理器或者是系统中的协处理器认为当前指令未定义时,产生未定义的指令异常中断,可以通过改异常中断机制仿真浮点向量运算。
(3)、软件中断
这是一个由用户定义的中断指令(SWI)。该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。在实时操作系统中可以通过该机制实现系统功能调用。
(4)、指令预取终止(Prefech Abort)
如果处理器预取的指令的地址不存在,或者该地址不允许当前指令访问,当被预取的指令执行时,处理器产生指令预取终止异常中断。
(5)、数据访问终止(DATAABORT)
如果数据访问指令的目标地址不存在,或者该地址不允许当前指令访问,处理器产生数据访问终止异常中断。
(6)、外部中断请求(IRQ)
当处理器的外部中断请求引脚有效,而且CPSR的寄存器的I控制位被清除时,处理器产生外部中断请求异常中断。系统中个外设通过该异常中断请求处理服务。
(7)、快速中断请求(FIQ)
当处理器的外部快速中断请求引脚有效,而且CPSR的F控制位被清除时,处理器产生外部中断请求异常中断。
3、出现异常后CPU自动处理的过程:(1)拷贝CPSR到SPSR_<mode>
(2)设置适当的CPSR位: 改变处理器状态进入ARM状态;改变处理器模式进入相应的异常模式;设置中断禁止位禁止相应中断
(3)更新LR_<mode>,这个寄存器中保存的是异常返回时的链接地址
(4)设置PC到相应的异常向量
异常向量表:http://blog.chinaunix.net/attachment/201205/23/20937170_1337783710UPK1.jpg
4、异常中断处理后返回: (1)、将所有修改过的用户寄存器从处理程序的保护栈中恢复。
(2)、将SPSR复制回CPSR中,将连接寄存器LR的值减去相应的偏移量后送到PC中。
(3)、若在进入异常处理时设置了中断禁止位,要在此清除。
复位异常处理程序不需要返回。
寄存器的组织方式:user:r0~r12,r13(sp),r14(lr),r15(pc),cpsr
fiq:r0~r7,r15,cpsr,改变(r8~r14),增加(spsr)
irq:改变(r13,r14),增加(spsr)
svc:改变(r13,r14),增加(spsr)
abort:改变(r13,r14),增加(spsr)
undef:改变(r13,r14),增加(spsr)
程序状态寄存器 条件标志 ... 禁止中断 状态 处理器模式
cpsr N(符号) Z(零) C(进位) V(溢出) ... I F 0(arm) 1(thumb) 0000 0001 0010 0011 0111 1011 1111
user fiq irq svc abort undef sys