分类: LINUX
2010-03-15 00:17:12
1.概述
VIC最多可以有32个中断请求输入,可将其通过配置分成3类:FIQ,向量中断IRQ,非向量中断IRQ。
2.对比
A:三者优先级不同
FIQ与向量IRQ的优先级可以通过配置相应的SFR来调整,但非向量中断IRQ不可以。其中FIQ优先级最高,其次是向量IRQ,非向量IRQ最低。其中向量IRQ的优先级又分为16个slot,slot0的优先级在向量IRQ中最高,slot15最低。
B:入口地址不同
此部分要结合异常向量表来理解,在7种异常中,IRQ与FIQ分别占2种,入口地址分别是:0X00000018,0X
........
LDR PC, [PC,#-0XFF0] ;IRQ
LDR PC, FIQ_Addr ;FIQ
......
这里FIQ很好理解,但这里的IRQ为什么要PC-0XFF0呢?
结合ARM7的三级流水线,这个问题应该就很简单了,当程序跳到0X18执行指令的时候,PC应该是0x18+8=0x20,然后0x20-0xff0=0xfffff030,此处0XFFFFF030正好是VICVectAddr的地址,意思就是通过一条简单的ARM指令,实现了IRQ的程序跳转
3.向量IRQ与非向量IRQ的定义与区别
A : 这里主要针对向量IRQ与非向量IRQ来说。在所有的中断源中(ARM7为19个),如果被定义为向量IRQ,那么没有被定义的中断源所引起的中断,全部为非向量中断。
B:每个向量IRQ都可以分配一个入口地址,但所有的非向量IRQ使用一个入口地址。