中断向量控制器和中断处理的主要寄存器
--参考朱有鹏ARM裸机
1、异常处理的2个阶段
可以将异常处理分为2个阶段来理解,第一阶段是异常向量表跳转
第二阶段就是进入了真正的异常处理程序irq_handler之后的部分。
2、中断处理的第一阶段处理
(1)第一个阶段之所以能够进行,主要依赖于CPU设计的提供的异常向量表机制
第一阶段的主要任务是从异常发生到响应异常并且保存、恢复现场,
跳转到真正的异常处理程序处。
(2)第二阶段的目的是识别多个中断源中究竟哪一个发生了中断,
然后调用相应的中断处理程序来处理这个中断。
3、S3C2440的第二阶段的处理过程
(1)第一个问题:怎么找到具体是哪个中断:S3C2440的中断控制器中有一个寄存器
寄存器的每一位对应一个中断源(那么一个寄存器应该对应于32个中断源)
但是S3C2440中中断源不止32个,所以2440里面又弄了一个子中断寄存器。
(2)怎么找到对应的ISR函数的问题?
首先给每个中断做了一个编号,进入ISR_handler之后先通过查询中断控制器和
相应 的子中断寄存器确定是什么中断源。
然后用这个编号去ISR数组(ISR数组是中断初始化事先设定好的)
就是把各个中断的ISR的函数名组成一个数组,用中断对应的编号作为索引来查询这个数组
4、S5PV210的第二阶段处理过程
(1)第一个问题,怎么找到具体是哪一个中断:S5PV210中支持的中断源很多,所以
直接设计了4个中断寄存器,每个32位,每位对应于一个中断源。
(理论上210最多支持128个中断源)
210没有子中断源,每个中断都是并列的,当中断发生时,轮询的查找是哪个中断源寄存器
,看哪一位被置1,则这个位对应的寄存器就发生了中断,即找到了中断编号。
(2)第二个问题:怎么找到对应的ISR问题
210支持的中断很多,如果还是使用2440的中断函数数组的话,查找起来非常的花
时间。于是210开拓了一种全新的寻找ISR的机制。
210提供了很多寄存器来解决每个中断源对应ISR寻找问题,
实现的效果就是,当发生了相应的中断,硬件会自动的将相应的ISR推入一定的寄存器中,
我们软件只要去这个寄存器中执行函数就可以了。
5、S5PV210的中断处理的主要寄存器
5.1、VICnINTENABLE和VICnINTENCLEAR
(1)VICnINTENABLE 这是中断的使能的寄存器,在你想要的中断源置位即可,
VICnINTENCLEAR这个寄存器置1的话,就代表该中断不使能。
5.2、VICnINTSELECT
(1)设置各个中断的模式为IRQ还是FIQ,一般都设置成IRQ
(2)IRQ和FIQ究竟有什么区别:210中支持2种中断,IRQ是普通中断,FIQ是快速中断。
(3)FIQ比IRQ快的地方是在:第一:FIQ有专用的r8-r12,因此在FIQ的ISR中可以直接使用r8-r12
而不用保存,这就能节省时间,
第二:异常向量表FIQ是在最后面,所以中断服务程序就可以直接写在FIQ中断服务入口处。
减少跳转的时间。
5.3、VICnIRQSTATUS和VICnFIQSTATUS
(1)中断状态寄存器,是只读的,当发生中断的时候,该位会置1,表示发生了中断。
当我们执行完中断服务函数的时候,就是靠这个处理中断的第二阶段的第一阶段,
就是靠查询这个寄存器来得到中断编号。
5.4、VICnVECTPRIORITY0~VICnVECTPRIORITY31
中断的优先级的寄存器,可以通过这个寄存器设置中断的优先级,实现中断嵌套。
5.5、VICnVECTADDR0~VICnVECTADDR31、VICnADDR
(1)这三个寄存器和210中断处理第二阶段的第二阶段有关。
(2)VICnVECTADDR0到31这32个寄存器分别用来存放真正的各个中断对应的isr的函数地址。相当于每一个中断源都有一个VECTADDR寄存器,程序员在设置中断的时候,把这个中断的isr地址直接放入这个中断对应的VECTADDR寄存器即可。
(3)VICnADDR这个寄存器是只需要读的,它里面的内容是由硬件自动设置的。当发生了相应中断时,硬件会自动识别中断编号,并且会自动找到这个中断的VECTADDR寄存器,然后将其读出复制到VICnADDR中,供我们使用。这样的设计避免了软件查找中断源和isr,节省了时间,提高了210的中断响应速度。
总结:
整个中断的流程分析:
第一部分:我们为中断响应而坐的预备工作:
1、初始化中断控制器
2、绑定写好的ISR到中断控制器
3、相应中断的所有条件使能
第二部分:当硬件产生中断后如何自动执行ISR
1、经过异常向量表跳转到IRQ、FIQ的入口
2、做中断现场保护(start.s),然后跳入ISR_handler
3、在ISR_handler中确定是哪一个中断,然后直接去这个VIC的ADDR
寄存器中取ISR来执行即可。
4、ISR执行完,中断现场恢复,直接返回继续做常规任务。