ARM基础知识(6.16)

来源:互联网 发布:非淘宝订单用电子面单 编辑:程序博客网 时间:2024/04/29 04:16
一 ARM工作模式


u(usr)  s(sys)  a(abt)  u(udf)  f(fiq)  i(irq)  s(svc)  m(mon)


非特权模式:usr模式
特权模式  :除了usr模式
异常模式  :abt,udf,fiq,irq,svc
安全监控  :mon 


特权模式特点:它可以访问ARM核内部受限制的资源,也可以自由切换到其他模式


二  ARM寄存器资源


(1)r0-r12  : 普通寄存器,可以当做c语言变量一样使用
(2)r13(sp) : 栈指针寄存器,它用来指定压栈的数据存放的地址
(3)r14(lr) : 在代码跳转的时候,用来记录pc的值,便于返回[lr->pc]
(4)r15(pc) : 程序计数器,它是告诉ARM核需要取的指令所在的地址
(6)CPSR    : 程序状态寄存器,它反映当前ARM核的状态
                                           7  6  5  4      0
--------------------------------------------------------------
N  Z  C  V |              ....            | I  F  T  |  mode
--------------------------------------------------------------


mode : 当前所在的模式
T    : 1->thumb状态   0->arm状态
F    : 0->enable      1->disable
I    : 0->enable      1->disable 
N    : 当前计算的结果为负数,则置1
Z    : 当前计算的结果为0,则置1
C    : 相加产生进位则置1,相减没有产生借位则置1
V    : 符号位溢出(两个正数相加的结果为负数),则置1


(6)SPSR    :  当异常产生的时候,保存CPSR的值,便于恢复现场


(7)所有模式共用的寄存器:r0-r7,pc,cpsr           8  + 1 + 1   = 10
(8)对于r8-r12,FIQ模式私有,其他模式共享        5  + 5       = 10
(9)r13,14 用户模式和系统模式共享,其他模式私有  2  + 5 x 2   = 12
(10)SPSR 异常模式拥有                            5            = 5
(11)MON  模式有私有的r13,r14,spsr


注意:共享的寄存器的在使用的时候,需要先保存它原有的数据,在使用,使用完恢复他原有的数据




三  ARM核的异常处理


1.异常产生的时候,ARM核自己做的事情
[1]保存CPSR到异常模式的spsr
[2]设置CPSR相应位
 <1>进入ARM状态
 <2>进入相应的异常模式
 <3>禁用相应的中断(可选)
[3]保存pc到异常模式的lr
[4]将pc指向对应的异常向量
 
2.程序需要做的事情
  [1]编写异常向量表(一块内存,放了一些跳转指令)
  [2]告诉ARM核异常向量表所在的位置
      <1>ARM7/ARM9/ARM11  异常向量表可以存放在:0x0000 0000 或 0xffff 0000
      <2>cortex-A系列,异常向量表可以存放在任意位置,它有协处理器cp15的c12寄存器决定
  注意:ARM核从0x0000 0000地址寻找异常向量表
  [3]编写异常处理函数
    
  注意:
  异常处理函数应该做的事情
  [1]保存共用的寄存器的值  
  [2]做异常处理的事情
  [3]返回:恢复现场 
   <1>恢复保存的寄存器的值
   <2>将异常模式的lr寄存器值赋值给pc
   <3>将异常模式的spsr赋值给cpsr  
0 0
原创粉丝点击