中断处理流程
中断上下文
cpu通过内核寄存器来运行指令并进行数据的读写处理的,它在进入中断前一个时刻的具体值,称为中断上下文
具体流程
初始化irq模式栈指针
进入irq模式
- cpsr寄存器
保存现场
- 通用寄存器
- lr
- spsr
获取中断编号
- 读取GIC基地址
- GICC基地址(GIC cpu interface)
- GICC_IAR寄存器
执行中断处理函数
- 根据中断编号,回调IRQ中断服务表
还原现场
通用寄存器
lr
spsr
返回原程序
- 三级流水线
cpsr寄存器
- bit31:负数标记位
- bit30:零标志位
- …
M[4:0]:运行模式控制位
- 10000:User 模式
- 10001:FIQ 模式
- 10010:IRQ 模式
- 10011:SVC模式
- 10111:Abort模式
- 11011:Undef模式
- 11111:System模式
- 10110:Monitor模式
- 11010:Hyp模式
mrs <Rt>,cpsr //读cpsr
msr cpsr,<Rt> //写cpsr
cps #xx //写立即数到cpsr中的M[4:0]
GICC基地址
4.1.3 CPU interface register ma (GIC官方手册)
三级流水线
- 取指令(pc)
- 译指令
- 执行指令
lr = pc = 当前执行指令+8
当前执行指令的下一条:lr-4