Chinaunix首页 | 论坛 | 博客
  • 博客访问: 549761
  • 博文数量: 181
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1498
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 15:17
个人简介

用发呆的时间来理清自己的思绪

文章存档

2015年(7)

2014年(134)

2013年(40)

分类: 嵌入式

2014-04-14 21:28:02

     FIQ(Fast Interrupt Request )和IRQ(Interrupt Request)是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。
    FIQ和IRQ是两种不同类型的中断,ARM为了支持这两种不同的中断,提供了对应的叫做FIQ和IRQ处理器模式(ARM有7种处理模式)。
      一般的中断控制器里我们可以配置与控制器相连的某个中断输入是FIQ还是IRQ,所以一个中断是可以指定为FIQ或者IRQ的,如果该中断设置为IRQ,那么当该中断产生的时候,中断处理器通过IRQ请求线告诉ARM,ARM就知道有个IRQ中断来了,然后ARM切换到IRQ模式运行。类似的如果该中断设置为FIQ,那么当该中断产生的时候,中断处理器通过FIQ请求线告诉ARM,ARM就知道有个FIQ中断来了,然后切换到FIQ模式运行。
     从字面上来说,FIQ比IRQ快,3个原因:

  1. FIQ有高于IRQ的优先级。//也就是说,多个中断产生时,CPU优先处理FIQ中断,处理FIQ时禁止IRQ,IRQ将不会被响应直到FIQ被处理完。
  2. FIQ具有额外的5个私有寄存器(R8-R12),中断发生时由硬件自动保存CPU寄存器(R8-R12)的值到R8_FIQ-R12_FIQ中,中断完成后,由硬件自动恢复R8_FIQ-R12_FIQ到寄存器(R8-R12)中。而IRQ则没有这种shandow(影子)寄存器,因此保存寄存器的值必须要用软件实现,即压栈和出栈均由中断服务程序完成,因此速度相对比较慢。
  3. FIQ中断向量位于异常向量表的最末端,因此中断服务程序可以直接放在异常向量表末端连续执行,不需要跳转,所以响应速度快。






阅读(4527) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~