中断是我们嵌入式开发很常用到的一种资源和编程手段。这篇文章重点分析arm的中断处理流程。
首先,中断是异常的一种。当发生一种异常时,处理器会进入不同的工作模式。ARM的异常和相应的模式之间的对应关系见下表:
当一个异常导致模式的改变时,ARM核自动地:
1、把cpsr保存到相应模式下的spsr
2、把pc保存到相应模式下的lr
3、设置cpsr为相应异常模式
4、设置pc为相应异常处理程序的入口地址
对于IRQ或者FIQ而言,还多一项变化:禁用相关的中断IRQ或FIQ,禁止同类型的其他中断被触发。(这也是自动实现的,因此正常情况下,ARM中断不可嵌套)
从异常中断处理程序退出时,需要我们在程序中用软件实现下面两个操作:
1、从spsr_mode中恢复数据到cpsr中
2、从lr_mode中恢复内容到pc中,返回到异常中断的指令的下一条政令处执行.
2440默认的有一个异常向量表,即发生某一个异常后,会根据异常向量表设置pc为相应的处理函数入口地址。