中断框架
中断框架可分为两个部分:
- 中断相关电路的初始化
- 中断信号响应
中断相关电路初始化
首先要配置中断源,使其能发出中断信号。接着设置中断的触发方式。中断触发方式有两种,边沿触发和电平触发。其中,边沿触发分为上升沿触发和下降沿触发,电平触发分为高电平触发和低电平触发。接着要使中断信号能顺利通过GIC电路 。GIC是ARM公司提供的一个通用中断管理电路。是联系CPU和外设中断的桥梁,负责检测、管理和分发中断。最后cpu要打开中断使能开关 。cpu状态寄存器的第6、7位分别是FIQ disable 和 IRQ disable。只有在中断屏蔽标志为“0”时,CPU才可以受理中断。
即电路初始化需要做的工作有:
- 配置中断源
- 设置中断的触发方式
- 使中断信号能顺利通过GIC电路
- cpu打开中断使能开关
中断信号的响应
cpu接收到中断时,首先要判断中断的类型,切换工作模式。将寄存器r0~r12的内容压入栈中。接着要将CPRS的内容保存到SPSR,将PC的内容保存到 lr,完成现场保护,并且跳到异常入口。
接着是中断处理的过程,实现用户要处理的业务代码.
处理完中断之后,cpu要恢复现场。首先切换工作模式,将 r0~r12 的内容出栈,将SPSR的内容给CPSR。最后通过 lr 里保存的地址跳回到之前的代码并继续执行。
即中断处理的过程主要是
- 现场保护
- 判断中断类型,切换工作模式
- 将寄存器r0~r12的内容入栈,CPRS的内容保存到SPSR
- 将PC的内容保存到 lr,而后跳到异常入口
- 真正的中断处理
实现用户的业务代码
- 恢复现场
恢复现场
恢复现场
- 切换工作模式
- r0~r12 的内容出栈,SPSR的内容给CPSR
- pc=lr,继续执行之前代码。