FIQ和IRQ

2023-10-05 17:19
文章标签 fiq irq

本文主要是介绍FIQ和IRQ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章1-FIQ和IRQ区别

FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。

一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,为了合理,要求系统更快响应,自身处理所耗时间也很短的中断设置为FIQ,否则就设置了IRQ。

如果该中断设置为了IRQ,那么当该中断产生的时候,中断处 理器通过IRQ请求线告诉ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的 时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。

简单的对比的话就是FIQ比IRQ快,为什么快呢?

ARM的FIQ模式提供了更多的banked寄存器,r8到 r14还有SPSR,而IRQ模式就没有那么多,R8,R9,R10,R11,R12对应的banked的寄存器就没有,这就意味着在ARM的IRQ模式 下,中断处理程序自己要保存R8到R12这几个寄存器,然后退出中断处理时程序要恢复这几个寄存器,而FIQ模式由于这几个寄存器都有banked寄存 器,模式切换时CPU自动保存这些值到banked寄存器,退出FIQ模式时自动恢复,所以这个过程FIQ比IRQ快.

FIQ比IRQ有更高优先级,如果FIQ和IRQ同时产生,那么FIQ先处理。

在symbian系统里,当CPU处于FIQ模式处理FIQ 中断的过程中,预取指令异常,未定义指令异常,软件中断全被禁止,所有的中断被屏蔽。所以FIQ就会很快执行,不会被其他异常或者中断打断,所以它又比 IRQ快了。而IRQ不一样,当ARM处理IRQ模式处理IRQ中断时,如果来了一个FIQ中断请求,那正在执行的IRQ中断处理程序会被抢断,ARM切 换到FIQ模式去执行这个FIQ,所以FIQ比IRQ快多了。

另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18。

原文地址:http://www.cublog.cn/u2/83842/showart_1404725.html


文章2-ARM的FIQ为何比IRQ快:

1。FIQ的优先级比IRQ高。

2。FIQ模式下,比IRQ模式多了几个独立的寄存器。

不要小看这几个寄存器,ARM在编译的时候,如果你FIQ中断处理程序足够用这几个独立的寄存器来运作,它就不会进行通用寄存器的压栈,这样也省了一些时间。

3。FIQ的中断向量地址在0x0000001C,而IRQ的在0x00000018。(也有的在FFFF001C以及FFFF0018)

写过完整汇编系统的都比较明白这点的差别,18只能放一条指令,为了不与1C处的FIQ冲突,这个地方只能跳转,而FIQ不一样,1C以后没有任何中断向量表了,这样可以直接在1C处放FIQ的中断处理程序,由于跳转的范围限制,至少少了一条跳转指令。

4。IRQ和FIQ的响应延迟有区别

IRQ的响应并不及时,从Verilog仿真来看,IRQ会延迟几个指令周期才跳转到中断向量处,看起来像是在等预取的指令执行完。FIQ的响应不清楚,也许比IRQ快。

原文地址:http://blog.csdn.net/masxcy/archive/2009/06/26/4301723.aspx

这篇关于FIQ和IRQ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/151659

相关文章

驱动:irq中断

按键中断  #include <linux/init.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/module.h>#include <asm/io.h>#include <asm/string.h>#include <asm/uaccess.h>#include <linux/miscdevice

request_irq() 注册中断服务函数

函数原型: int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 参数:irq:申请的硬件中断号            handler:向系统注册的中断处理函数,当中断发生时会触发该函数.  dev_id参数将被传递

RK3568-修改fiq-debugger调试串口

瑞芯微SDK默认将uart2_m0作为调试串口,以下方法将调试串口修改为uart5_m1。 修改bootloader 修改/OK3568-linux-source/rkbin/tools/ddrbin_param.txt文件,5表示串口5。1表示复用m1。 执行./ddrbin_tool ddrbin_param.txt ../bin/rk35/rk3568_ddr_1560MH

IRQ 中断请求

IRQ是中断请求(Interrupt Request)的缩写。在计算机系统中,中断是一种机制,允许外部设备或程序通过发送信号来打断CPU的正常执行流程,从而引起CPU执行特定的中断服务程序(Interrupt Service Routine,ISR)。 中断请求(IRQ)是指外部设备或程序向CPU发出的一种请求,请求CPU停止当前任务并执行与中断相关的处理程序。当一个设备或程序产生一个中断请求时

[linux api] of_irq_init

总结: 以如下级联的中断控制器为例: of_irq_init会确保先初始化父控制器再初始化子控制器,也即整体按照层序遍历的顺序进行初始化,以上图为例,其初始化顺序为: intc0intc1-2intc3-6 具体实现则分为两个阶段: 第一阶段 遍历所有设备节点,并与参数matches进行匹配,找出所有的中断控制器节点,串到一条名为intc_desc_list的链表上(以下节点在链表中

arm工作模式、arm9通用寄存器、异常向量表中irq的异常向量、cpsr中的哪几位是用来设置工作模式以及r13,r14,15别名是什么?有什么作用?

ARM 首先先介绍一下ARM公司。ARM成立于1990年11月,前身为Acorn计算机公司主要设计ARM系列RISC处理器内核授权ARM内核给生产和销售半导体的合作伙伴ARM公司不生产芯片提供基于ARM架构的开发设计技术软件工具评估版调试工具应用软件总线架构外围设备单元等等 CPU中央处理器 首先在芯片中,中央处理器(CPU) 是一台计算机的运算核心和控制核心。 CPU、内部存储器

Linux 内核irq_stack遍历

环境Centos 4.18.0-80.el8.x86_64 一、x86架构堆栈类型说明 https://www.kernel.org/doc/Documentation/x86/kernel-stacks int get_stack_info(unsigned long *stack, struct task_struct *task,struct stack_info *info, uns

由request_irq()函数引发对中断的理解

http://blog.chinaunix.net/uid-24666775-id-3787938.html http://blog.chinaunix.net/uid-24666775-id-3787938.html 由request_irq()函数引发对中断的理解 2013-07-04 17:18:37 分类: LINUX 1、  中断的理解 中断你可以理解为就

IRQ是什么意思?

IRQ 表示中断请求(Interrupt Request),是一种处理器的中断信号。中断是一种异步事件,可以打断处理器当前的执行流程,以执行一个特定的中断服务程序(Interrupt Service Routine,ISR)来处理特定事件。 当外部设备或内部事件需要处理器的注意时,它会通过发送中断请求(IRQ)信号来通知处理器。处理器在接收到中断请求后,会中断当前执行的指令流程,保存当前上下文,

linux --中断管理 -- irq的自动探测机制

irq自动探测机制 如果一个设备的驱动程序无法确定它说管理的设备的软件中断号irq,此时设备驱动程序可以使用irq的自动探测机制来获取其正在使用的irq。 使用自动探测机制的条件 内核与驱动,必须共同努力才能完成只限于非共享中断的情况 探测前,驱动的设备关联到了某个irq,但是因为设备驱动程序还不清楚是哪个irq,因此无法调用request_irq来向该irq安装中断处理例程,所以对应ir