您的位置:首页 > 其它

ARM基础知识(6.16)

2015-06-29 20:33 176 查看
一 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: