声明:本文参考北京微芯力科技有限公司李驹光的课件
1、ARM微处理器的工作状态
从编程角度看,ARM的工作状态有两种:
ARM状态:处理器执行32位的字对齐的ARM指令
Thumb状态:处理器执行16位,半字对齐的Thumb指令
2、ARM体系结构的存储器格式
ARM有大端和小端存储模式,用户可以根据自己的需要来确定
大端模式:“高低高低”,字数据的高字节存储是低地址中
小端模式:“高高低低”,与大端模式恰好相反,低地址存放字数据的低字节,高地址存放字数据的高字节
3、处理器模式
ARM微处理器支持7种运行模式
管理模式(svc):操作系统使用的保护模式
用户模式(usr):ARM处理器正常的程序执行状态
系统模式(sys):运行具有特权的操作系统任务
中断模式(irq):用于通用的中断处理
快速中断模式(fiq):用于高速数据传输或通道处理
数据访问终止模式(abt):当数据访问终止时进入该模式,可用于虚拟存储及存储保护
未定义模式(und):当处理器遇到没有定义的指令或处理器不支持该指令时,进入未定义模式
除用户模式之外,所有其他模式统称为特权模式,他们具有对系统资源的完全访问权限,并可以随意更改模式。
4、寄存器组织器
ARM寄存器共有37个寄存器(31个通用寄存器+6个状态寄存器),全部是32bit宽,任何时候,通用寄存器R0-R14,PC(R15)、状态寄存器(CPSR)是可以访问的。
1)未分组寄存器(R0-R7):所有的运行的模式下,都指向同一个物理寄存器
2)分组寄存器(R8-R12):快速中断模式有自己独立的R8-R12,其他模式下都是通用的。
3)R13、R14:除了用户模式和系统模式共用,其他模式下都有自己单独的R13、R14
4)程序计数器R15,当前状态寄存器CPSR:所有模式下都共用一个R15和CPSR
5)备份程序状态寄存器SPSR:除了用户模式,其他模式下都有自己的SPSR
6)ARM寄存器组织图解:用户程序运行在usr模式,出usr外,其他六种模式都为特权模式,除usr、system外的五种称为异常模式,每种模式下都有自己独自的SPST,用于保存进入异常前的CPSR;
5、异常
当正常的程序执行流程发生暂时的停止或改变时,称之为异常,例如处理一个外部的中断请求
复位:当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。
未定义指令:当ARM处理器或协处理器遇到不能处理的指令时,产生未定义指令异常。可使用该异常机制进行软件仿真。
指令预取中止:当处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发送中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
数据中止:若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
软件中断:该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。
IRQ(外部中断请求):当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生TRQ异常。系统的外设可通过该异常请求中断服务。
FIQ(快速中断请求):当处理器的快速中断请求引脚有效且CPSR中的F位为0时,产生FIQ异常。
6、ARM处理器对异常的响应
1)、将下一条指令的地址存入相应链接寄存器LR,以便程序在处理异常返回是能从正确的位置重新开始执行。
2)、将CPSR复制到相应的SPSR中
3)、根据异常类型,强制设置CPSR的运行模式位
4)、强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。
7、从异常返回
异常处理完毕后,ARM微处理器会执行以下几步操作从异常返回:
1)将连接寄存器LR的值减去相应的偏移量后送到PC中。
2)将SPSR复制回CPSR中
8、异常向量
0x0000,0000:复位
0x0000,0004:未定义指令
0x0000,0008:软件中断
0x0000,000c:中止(预取指令)
0x0000,0010:中止(数据)
0x0000,0014:保留
0x0000,0018:IRQ
0x0000,001c:FIQ