S5PV210中的中断相关寄存器有很多,这里我只详细介绍我们常用的几个比较重要的寄存器:
* VICnINTENABLE和VICnINTENCLEAR
* VICnINTSELECT
* VICnIRQSTATUS和VICnFIQSTATUS
* VICnVECTPRIORITY0~VICnVECTPRIORITY31
* VICnVECTADDR0~VICnVECTADDR31、VICnADDR
下面我们一个一个的看:
* Interrupt Enable Register(中断使能寄存器)
可读可写,S5PV210中有四个这样的寄存器,每一个位表示一个中断源。
读取的时候:0:禁止中断 1:中断允许
写入的时候:0:无影响 1:使能中断
* Interrupt Enable Clear Register(清除中断使能寄存器)
这个寄存器就是和上面那个寄存器功能相反的,也就是禁止相应中断源使能。
* Interrupt Select Register (中断类型选择寄存器)
每一个位代表一个中断源,表示中断源的中断类型:
0:IRQ中断 1:FIQ中断
* IRQ Status Register(IRQ状态寄存器)
用来检测哪个中断源发生了中断。只读寄存器。(IRQ普通中断模式下)
* FIQ Status Register(FIQ状态寄存器)
用来检测哪个中断源发生了中断。只读寄存器。(FIQ快速中断模式下)
* Vector Priority Registers)(中断向量优先级寄存器)
通过写入十六进制0x0~0xF,来设置相应中断源的中断优先级。
* Vector Address Register
这个寄存器存放着每一个中断源对应的中断处理程序的入口地址。这里的值使我们在编程的时候需要写进去的,然后让下面这个寄存器通过硬件读取。
* Vector Address Register
这个寄存器就特别重要了,也是S5PV210执行中断服务程序的关键。这个寄存器包含了当前要执行的中断服务程序的地址。其实这个寄存器作用就是当发生了一个中断时,S5PV210通过硬件设计自动识别中断编号,然后将相应的中断服务程序地址(就是上一个寄存器(VICVECTADDR)中的值)赋值到这个寄存器中,这样就可以给我们省去了软件查找中断源和ISR的时间了,我们可以直接读取这个寄存器就可以执行此时发生的中断源的中断服务程序,大大提高了S5PV210的中断相应时间。