一步步写嵌入式操作系统 arm相关知识

arm模式分类
1.系统模式
2.用户模式
3.中断模式
4.快速中断模式
5.管理模式
6.中止模式
7.未定义模式

其中除系统模式和用户模式之外的模式为异常模式或特权模式,对应如下的异常状态

arm异常状态分类
1.芯片复位异常 属于 管理模式 芯片复位时产生
2.未定义指令异常 属于 未定义模式 指令不能被芯片识别时产生
3.软件中断异常 属于 管理模式 软件调用swi指令时产生
4.预取址中止异常 属于 中止模式 没有权限访问存储器时产生
5.数据中止异常 属于 中止模式 没有权限访问存储器时产生
6.中断异常 属于 中断模式 硬件进行中断请求时产生
7.快速中断异常 属于 快速中断模式 硬件进行快速中断请求时产生

arm寄存器分类(arm一共37个寄存器)
1.系统模式和用户模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,pc,cpsr
2.快速中断模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8_fiq,r9_fiq,r10_fiq,r11_fiq,r12_fiq,r13_fiq,r14_fiq,pc,cpsr,spsr_fiq
3.管理模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_svc,r14_svc,pc,cpsr,spsr_und
4.中止模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_abt,r14_abt,pc,cpsr,spsr_abt
5.中断模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_irq,r14_irq,pc,cpsr,spsr_irq
6.未定义模式可访问的寄存器
    r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13_und,r14_und,pc,cpsr,spsr_und

各个模式的r13寄存器为各个模式的堆栈指针寄存器(sp)
各个模式的r14寄存器为各个模式的链接寄存器(lr)
pc寄存器始终指向下一条运行的指令

函数参数一般存放于r0,r1,r2,r3寄存器

函数调用返回值一般存放于r0寄存器

arm在各个异常时r14寄存器的值
芯片复位异常    无     未定义芯片复位异常时的r14
未定义异常      r14    触发未定义异常的指令的下一条指令的地址
软中断异常      r14    swi指令的下一条指令的地址
预取址中止异常  r14-4  导致预取址中止异常的指令的地址
数据中止异常    r14-8  导致数据中止异常的指令的地址
中断异常        r14-4  主程序中响应中断的前一条指令的下一条指令的地址
快速中断异常    r14-4   主程序中响应快速中断的前一条指令的下一条指令的地址

cpsr寄存器即当前程序状态寄存器
cpsr各个位的数值意义如下
cpsr:31     溢出标识位
cpsr:30     进位标识
cpsr:29     零标识
cpsr:28     负数标识
cpsr:27到cpsr:8     未定义,保留位
cpsr:7      中断屏蔽位
cpsr:6      快速中断屏蔽位
cpsr:5      指令模式位      
cpsr:4到cpsr:0  共同设置模式值,10011为管理模式,11111系统模式,10111中止模式,10001快速中断模式,11011未定义模式,10000用户模式
各个模式的spsr寄存器为保存程序状态寄存器,cpu模式切换时,可把cpsr的值保存到其中

arm上电时程序从0x00处执行,链接器可将某物理地址链接为0x00,实现上电后从指定入口地址运行

异常发生时硬件自动完成的操作
1.把cpsr保存到对应异常模式的spsr
2.把pc寄存器保存到对应模式的lr
3.把cpsr设置位对应的异常模式
4.设置pc寄存器为对应异常模式的处理程序地址

arm异常向量表,一共32字节
1.将pc置为复位异常向量的处理程序的入口地址(4字节)
2.将pc置为未定义异常向量的处理程序的入口地址(4字节)
3.将pc置为软中断异常向量的处理程序的入口地址(4字节)
4.将pc置为预取址中止异常向量的处理程序的入口地址(4字节)
5.将pc置为数据中止异常向量的处理程序的入口地址(4字节)
6.将pc置为保留异常向量的处理程序的入口地址(4字节)
7.将pc置为中断异常向量的处理程序的入口地址(4字节)
8.将pc置为快速中断异常向量的处理程序的入口地址(4字节)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值