关于ARM的中断--向量与非向量的区别


向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单

向量中断控制器VIC具有32个中断请求输入,可将其编程分为3类,FIQ,向量IRQ和非向量IRQ。

FIQ(fast interrpt request)快速中断请求要求具有最高优先级。如果分配给FIQ的请求多于一个,VIC将中断请求相或后向ARM处理器产生FIQ信号。当只有一个中断被分配为FIQ时可实现最短的FIQ等待,但如果分配给IFIQ级的中断多于1个,FIQ服务程序需要读取FIQ状态寄存器来识别产生中断请求的FIQ中断源!

向量IRQ具有中等优先级。该级别可分别32个请求中断的16个。32个请求种的任意一个都可分配到16个向量IRQ slot中的任意一个,其中slot0具有最高优先级

非向量IRQ的优先级最低

1. 中断优先级不同: 非向量中断比向量中断要低(向量中断则比FIQ优先级低);

2. 两者的设置方式不同:非向量中断只需要通过VICDefVectAddr来设置ISR地址,然后在VIC控制器中使能外设中断即可;而向量中断配置时,先选择为IRQ中断,然后分配中断通道(即优先级。此为IRQ内部的优先级,不同于FIQ、IRQ与非向量中断三者的优先级意义),再在VICVectAddrx 中设置ISR地址,最后使能向量中断。

3. 中断响应异同:响应过程两者皆是由VIC硬件来控制,用户软件不用干预。共同点是,当中断产生,处理器进入IRQ模式,并将对应的ISR地址保存寄存器的值,复制到VICVectAddr寄存器中,PC根据此地址进行跳转,执行相应ISR程序。而区别如下:

a. 非向量中断:ISR地址由VICDefVectAddr复制到VICVectAddr,如果有多路非向量中断,在确定是哪路中断产生时,要通过VICIRQStatus寄存器来查询;

b. 向量中断:ISR地址由VICVectAddrx复制到VICVectAddr,如果有多路向量中断,在同时产生中断时,处理器响应的是具有最高优先级的IRQ中断。

4. 中断服务程序编写:两者没有差异。中断处理完毕后,皆要先清除中断标志,再对VICVectAddr执行写操作,以更新中断优先级,正常响应下一次中断。

相关内容