Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1502122
  • 博文数量: 213
  • 博客积分: 10418
  • 博客等级: 上将
  • 技术积分: 3358
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 23:49
文章分类

全部博文(213)

文章存档

2014年(1)

2013年(5)

2012年(11)

2011年(2)

2010年(8)

2009年(26)

2008年(160)

分类: LINUX

2010-03-15 00:17:12

1.概述

VIC最多可以有32个中断请求输入,可将其通过配置分成3类:FIQ,向量中断IRQ,非向量中断IRQ

 

2.对比

A:三者优先级不同

FIQ与向量IRQ的优先级可以通过配置相应的SFR来调整,但非向量中断IRQ不可以。其中FIQ优先级最高,其次是向量IRQ,非向量IRQ最低。其中向量IRQ的优先级又分为16slotslot0的优先级在向量IRQ中最高,slot15最低。

B:入口地址不同

此部分要结合异常向量表来理解,在7种异常中,IRQFIQ分别占2种,入口地址分别是:0X00000018,0X0000001C。也就是当发生这2种异常的时候,PC会自动转到这2个地址来。可以参考一般的部分启动代码:

........

LDR PC, [PC,#-0XFF0]    ;IRQ

LDR PC, FIQ_Addr             ;FIQ

......

 

这里FIQ很好理解,但这里的IRQ为什么要PC-0XFF0呢?

结合ARM7的三级流水线,这个问题应该就很简单了,当程序跳到0X18执行指令的时候,PC应该是0x18+8=0x20,然后0x20-0xff0=0xfffff030,此处0XFFFFF030正好是VICVectAddr的地址,意思就是通过一条简单的ARM指令,实现了IRQ的程序跳转

 

3.向量IRQ与非向量IRQ的定义与区别

A : 这里主要针对向量IRQ与非向量IRQ来说。在所有的中断源中(ARM719个),如果被定义为向量IRQ,那么没有被定义的中断源所引起的中断,全部为非向量中断。

B:每个向量IRQ都可以分配一个入口地址,但所有的非向量IRQ使用一个入口地址。

 

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