一、异常处理的两个过程

    第一,异常向量表的跳转

    第二,进入异常处理程序中

二、异常处理中的第一个过程

    1、当发生异常时,CPU会自动跳转PC到异常向量表对应的地址处,软件需要处理的就是将这个异常处理的代码首地址填入这个异常向量地址处。

    2、中断处理要先在汇编文件中进行,主要的过程是保护现场和恢复现场

    保护现场:主要是设置IRQ栈、保存LR和保存r0-r12,中断返回时关键的就是对于PC和cpsr两个寄存器的保存。中断返回地址保存在LR中,而cpsr自动保存在(IRQ模式下的)spsr中。

    恢复现场:主要就是恢复r0-r12、PC和cpsr等寄存器。

三、异常处理的第二个过程

    1、找到具体哪个中断:对于s5pv210中断体系采用4个寄存器,每个32位,每位对应一个中断源,当中断产生时,会依次去查询4个中断源寄存器,当某一位被置1,则是发生了对应的中断,即找到了中断编号。

    2、找到对应的isr:210提供了很多寄存器来解决中断源对应isr的寻找问题。当中断发生时,硬件会自动将相应的isr推入到对应的寄存器中,软件只要去这个寄存器中执行函数即可。

四、整个中断的工作分为两部分:

    第一部分是我们为中断响应而做的预备工作:

    1、初始化中断控制器

    2、绑定写好的isr到中断控制器

    3、相应中断的所有条件使能

    第二部分是当硬件产生中断后如何自动执行isr:

    1、经过异常向量表跳转入IRQ/FIQ的入口

    2、做中断现场保护(在start.S中),然后跳入isr_handler

    3、在isr_handler中先去搞清楚是哪个VIC中断了,然后直接去这个VIC的ADDR寄存器中取isr来执行即可。

    4、isr执行完,中断现场恢复,直接返回继续做常规任务。

五、irq和fiq的区别

    210中支持两种中断,irq和fiq。irq是普通中断,fiq是快速中断。快速中断提供一种更快响应处理的中断通道,用于对实时性要求很高的中断源。fiq在CPU设计时预先提供了一些机制保证fiq可以被快速处理,从而保证实时性。fiq的限制就是只能有一个中断源被设置为fiq,其他都是irq。

    对于CPU如何保证fiq比irq快,有2个原因:

    第一,fiq模式有专用的r8-r12,因此在fiq的isr中可以直接使用r8-r12而不用保存,这就能节省时间;

    第二,异常向量表中fiq是最后一个异常向量入口。因此fiq的isr不需要跳转,可以直接写在原地,这样就比其他异常少跳转一次,省了些时间。