简单总结一下ARM处理器工作模式及其寄存器!
一. 异常与中断的理解
Insight One
- 中断描述的主体是外设(向CPU发送信号),异常描述的主体是CPU(接收信号)
- 中断是一个过程,是CPU在执行当前的程序的过程中因硬件或软件的原因插入了另一段程序运行的过程
Insight Two
- 中断是异常的一种,异常分为中断异常(IRQ/FIQ)和非中断异常(SVC/Undefine/Abort)
二. 7个工作模式
7个工作模式分别为:User, FIQ, IRQ, SVC, Abort, Undefine, System
A. Normal Mode
1.User
- 用户模式
- 用户程序运行模式,运行在操作系统的用户态,没有权限去操作其他硬件资源,不能切换到其它模式下,只能执行处理自己的数据,要想访问硬件资源或切换其它模式只能通过软中断或产生异常
B. Privileged Modes
- 特权模式
- 该组模式下可以任意访问系统资源
其特权:
MRS
(把状态寄存器的内容放到通用寄存器)MSR
(把通用寄存器的内容放到状态寄存器)
由于状态寄存器的内容不能够改变,因此先把内容复制到通用寄存器中,然后修改通用寄存器中的内容,再把通用寄存器中的内容复制给状态寄存器中,即可完成“修改状态寄存器”的任务
异常模式
2.FIQ
- 快速中断模式
- 一个高优先级(fast)中断产生
3.IRQ
- 普通中断模式
- 一个低优先级(normal)中断产生
4.Supervisor/SVC
- 管理模式
- 操作系统的保护模式,系统开机、复位或软中断指令执行时响应
- CPU上电后默认模式,该模式主要用来做系统初始化,软中断处理也在该模式下,当用户模式下的用户程序请求使用硬件资源是,通过软件中断进入该模式
5.Abort
- 中止模式
- 虚拟内存和存储器的保护模式,指令预取中止和数据访问中止时响应
- 当用户程序访问非法地址,没有权限读取的内存地址时,会进入该模式。Linux下编程出现的segment fault通常都是在该模式下抛出返回的
6.Undefine
- 未定义模式
- 用于软件仿真,CPU在指令的译码阶段不能识别某指令操作时响应
非异常模式
7.System
- 系统模式
- 共用User模式下相同寄存器集的特权模式,运行操作系统任务,可以访问所有系统资源
地址偏移量
各种异常模式的地址偏移量


三. 37个寄存器
1. 30个通用寄存器
- 1.1. 8个不分组寄存器
- 8个(R0-R7)
- [x] R0-R7
- 8个(R0-R7)
- 1.2. 22个分组寄存器
- 10个(R8-R12)
- [x] 5个FIQ模式的分组寄存器
- [x] 5个非FIQ模式的分组寄存器
- 12个(R13-R14)
- [x] 6个SP(Stack Pointer Register)
- [x] 6个LR(Link Register)
- 10个(R8-R12)
2. 7个特殊功能寄存器
- 2.1.
- 1个(R15)
- [x] PC指针(Program Control register)
- PC指向哪里,CPU就会执行哪条代码,所以程序跳转就是把目标地址代码放到PC中
- [x] PC指针(Program Control register)
- 1个
- [x] CPSR(Current program status register/当前程序状态寄存器)
- 5个
- [x] SPSR(Saved program status register/保存程序状态寄存器)
- 异常模式下使用
- [x] SPSR(Saved program status register/保存程序状态寄存器)
- 1个(R15)
- mode位(bit4~bit0)决定了CPU的工作模式,uboot代码中使用汇编设置


四. 异常产生及其返回

五. ARM的基本设定
ARM约定
Byte : 8bits
Halfword : 16bits
Word : 32bits
大部分ARM core提供
ARM指令集(32 bit)
Thumb指令集(16 bit)
Thumb2指令集(16 & 32 bit)
注:本文内容部分来自互联网整理,部分来自个人经验总结;本文将持续收集更新,欢迎留言补充!