ARM体系的CPU具有7种工作模式
- 用户模式(usr):ARM处理器正常的程序执行状态
- 快速中断模式(fiq):用于高速数据传输或通道处理
- 中断模式(irq):用于通用的中断处理
- 管理模式(svc):操作系统使用的保护模式
- 数据访问中止模式(abt):当数据或指令预取终止时进入该模式,用于虚拟存储以及存储保护
- 系统模式(sys):运行具有特权的操作系统任务
- 未定义指令中止模式:(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真
模式不同的时的区别
-
不同的寄存器
在不同的模式下同样的汇编指令所操作的寄存器不同,在切换模式的时候,需要提前保存“现场”,由于模式切换会改变寄存器,那么不保存则数据会丢失。
不同模式下的寄存器情况 - 不同的权限
CPU在不同的模式下,配合MMU可以限制部分内存的访问权限 - 触发条件
上电后,位于管理模式;
发生中断,进入irq模式等等
异常和中断
- 中断
当程序在处理一件事时,有两种方法能够获取其他的状态改变的信息,第一种是不断的去查看是否状态发生了改变,第二种是采用中断的方式来通知程序状态已经改变了。
中断是一种异常。
发生了异常之后,会发生:
1.CPU强制进入异常模式(相当于切换了寄存器);
2.PC指针(PC是指寄存器PC,它里边的值总是指向当前程序的运行点的地址。)等于异常入口(异常入口是一些固定的地址),也就相当与cpu跳转到对应的地址进行执行,异常处理程序。
2440的中断体系结构
使用中断的前提,需要有一个程序“被中断”
- 中断发生,保存“别人”的状态
在能发生中断前,需要先使能中断(之前需要有一些初始化(初始化引脚))。
- 中断处理
分辨中断源,进行不同的处理,处理完后清除中断状态 - 恢复“别人”的状态
那么在2440芯片中按照上面的中断过程来看,那么2440中一定会有:
- 使能/禁止中断
- 分辨中断源(状态寄存器)
- 何种状态发生中断:高电平触发/低电平触发/上升沿触发/下降沿触发等
- 引脚设置为中断引脚(GPIO为EINT,串口等则会不同,具体和硬件相关)
- 中断的优先级寄存器,来处理多个中断同时发生的处理情况

2440的中断程序图
@************************************************************************