分类: LINUX
2011-05-26 17:05:44
2:将被中断任务模式的PC值保存到IRQ模式中的LR寄存器中;
3:将模式自动切换到IRQ模式,并将CPSR中的bit7位置1禁止后继IRQ中断的发生;
4:跳转到相应的中断处理程序中执行
中断处理程序一般保存中断现场,包括存在LR中的返回地址。在中断处理完毕后从栈中回复现场,并将LR的值给PC以返还到被中断的下一条指令。
linux kernel中支持中断嵌套,即在中断处理程序中开中断,允许新的中断进来并处理。已有的中断处理程序在调用函数时会把返回地址放在IRQ模式的LR中,如果此时发生新的中断,新中断的返回地址也会被cpu自动放在IRQ模式的LR中,从而冲掉正在处理的中断函数调用返回地址导致错误。
linux kernel中为了处理这种情况,进入中断处理程序后并在开中断允许中断嵌套之前,将处理其模式切换到svc模式,由于svc有自己独立的LR寄存器,函数调用是返回地址是放在svc模式的LR寄存器中不与IRQ模式的LR冲突,从而保证了中断嵌套的安全性。
linux kernel中相关代码在arch/arm/kernel/entry-armv.S中