[应用相关] 关于ARM的中断--向量与非向量的区别

[复制链接]
1463|11
 楼主| LOVEEVER 发表于 2024-9-12 15:00 | 显示全部楼层 |阅读模式
向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单

向量中断控制器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执行写操作,以更新中断优先级,正常响应下一次中断。



声明:本号原创、转载的文章、图片等版权归原作者所有,如有侵权,请联系删除。

qsrg51 发表于 2024-9-29 23:31 来自手机 | 显示全部楼层
寄存器来识别产生中断请求的
在水一方00 发表于 2024-9-30 23:53 来自手机 | 显示全部楼层
向量中断控制器VIC具有32个中断请求输入
tpgf 发表于 2024-10-8 15:12 | 显示全部楼层
向量中断具有更快的响应速度,因为它直接跳转到预先设定好的中断服务程序地址
星辰大海不退缩 发表于 2024-10-8 21:30 | 显示全部楼层
向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。
heimaojingzhang 发表于 2024-10-9 07:08 | 显示全部楼层
向量中断由硬件提供中断服务程序入口地址,每个中断都有唯一的入口地址
keaibukelian 发表于 2024-10-9 08:17 | 显示全部楼层
非向量中断需要先进入一个通用的中断处理程序,然后通过软件查询来确定具体的中断源
paotangsan 发表于 2024-10-10 08:08 | 显示全部楼层
向量中断需要在初始化时为每个中断设置特定的中断向量地址和优先级
renzheshengui 发表于 2024-10-10 09:18 | 显示全部楼层
非向量中断只需编写一个通用的处理程序,然后根据中断状态寄存器来判断具体的中断源,编程较为简单
wakayi 发表于 2024-10-10 10:36 | 显示全部楼层
向量中断提供了更快的响应时间和更精确的中断处理,适合对实时性要求高的场景。而非向量中断则简化了编程模型,适用于中断源较少或对实时性要求不高的应用
略略u 发表于 2024-10-11 21:55 来自手机 | 显示全部楼层
进去了在判断中断标志来识别具体是哪个中断
Stahan 发表于 2024-10-13 21:27 | 显示全部楼层
向量中断更快吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

350

主题

2689

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部