向量中断与非向量中断的区别
2010-03-17 09:19
260 查看
转帖网址:http://home.eeworld.com.cn/my/space.php?uid=140667&do=blog&id=22338
向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单
向量中断控制器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执行写操作,以更新中断优先级,正常响应下一次中断。
向量中断就是不同的中断有不同的入口地址,非向量中断就只有一个入口地址,进去了在判断中断标志来识别具体是哪个中断。向量中断实时性好,非向量中断简单
向量中断控制器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执行写操作,以更新中断优先级,正常响应下一次中断。
相关文章推荐
- 向量中断与非向量中断的区别
- 向量中断与非向量中断的区别
- 中断号 和 中断向量区别
- 关于ARM的中断--向量与非向量的区别噢
- 关于向量中断和非向量中断的区别!
- 向量中断与非向量中断------s3c44b0
- ARM11---中断---向量中断控制器(VIC)---结合s3c6410
- 模态对话框与非模态对话的几种销毁方法与区别
- Linux内核之进程上下文和中断上下文的区别
- TI C64X DSP中断向量表的配置(硬件中断)-- 转自新浪博客
- ADS/GNU 的向量中断服务函数及对其方式指定修饰符号
- 中断上下文和进程上下文的区别
- STM32 (Cortex-M3) 中NVIC(嵌套向量中断控制)的理解
- PHP的线程安全与非线程安全版本的区别
- 软件中断和硬件中断的区别
- 外部中断边沿触发和电平触发的区别
- 中断向量
- Linux init/main.c 初始化中硬件中断向量初始化 trap_init()
- 阻塞(sleep等等)区别 中断(interrupt)+ 中断的意义
- 符号数与非符号数的小小区别