注意 :部分器件内部虽然没有用户 Flash空间(比如 LPC2210/2220/2290),但它们仍然存在Boot Block,并且
4.3 向量中断控制器
• 概述
ARM7TDMI内核具有两个中断输入,分别为 IRQ中断和FIQ中断。向量中断控制器(VIC)负责 管理芯片的中断源,最多可以管理32个中断输入请 求。
CPU 内核 ARM7TDMI-S
4.3 向量中断控制器
• 程序状态寄存器CPSR与VIC的关系
ARM内核通过CPSR来监视和控制内部的操作,
CPSR中的“I”位和“F”位分别用来控制IRQ模式和FIQ 模式的使能。
CPU ARM7TDMI-S
VIC
IRQ
FIQ
CPSR[ 7 ](I)
CPSR[ 6 ](F)
4.3 向量中断控制器
• 程序状态寄存器CPSR与VIC的关系
Ø 当I = 1时,禁止IRQ中断
CPU ARM7TDMI-S
VIC
IRQ
FIQ
CPSR[ 7 ](I)
CPSR[ 6 ](F)
Ø 当I = 0时,使能IRQ中断
CPU ARM7TDMI-S
VIC
IRQ
FIQ
CPSR[ 7 ](I)
CPSR[ 6 ](F)
4.3 向量中断控制器
• 程序状态寄存器CPSR与VIC的关系
Ø 当F = 1时,禁止FIQ中断
CPU ARM7TDMI-S
VIC
IRQ
FIQ
CPSR[ 7 ](I)
CPSR[ 6 ](F)
Ø 当F = 0时,使能FIQ中断
CPU ARM7TDMI-S
VIC
IRQ
FIQ
CPSR[ 7 ](I)
CPSR[ 6 ](F)
4.3 向量中断控制器
• 中断分类
中断输入请求可以在VIC中被设置为以下三类:
§
FIQ中断:具有最高优先级;§
向量IRQ中断:具有中等优先级;§
非向量IRQ中断:具有最低优先级;ARM7 TDMI VIC
向量IRQ
非向量IRQ FIQ
IRQ
FIQ
4.3 向量中断控制器
• FIQ中断硬件处理流程
将当前的程序状态寄存器的内容备份 即,SPSR_fiq = CPSR
处理器切换到FIQ模式
禁止IRQ和FIQ中断,即,I = F = 1 保存返回地址
LR_fiq = PC
设置FIQ异常入口地址 PC = 0x1C
发生FIQ异常事件
说明:ARM7不支持FIQ中断嵌套
4.3 向量中断控制器
• IRQ中断相应流程
将当前的程序状态寄存器的内容备份 即,SPSR_irq = CPSR
处理器切换到IRQ模式
禁止IRQ中断,即,I = 1 保存返回地址
LR_irq = PC
设置IRQ异常入口地址 PC = 0x18
发生IRQ异常事件
说明:ARM7不支持IRQ中断嵌套
向量 VICVectCntl0
向量地址0寄存器 VICVectAddr0
默认向量地址寄存器 VICDefVectAddr
向量 VICVectCntl15
向量地址15寄存器 VICVectAddr15
DefIRQ IRQ0
IRQ15 VectAddr0
VectAddr15
DefVectAddr
硬 VICVectAddr
IRQ0
IRQ15
DefIRQ
IRQ中断信号 VICIRQStatus
FIQ 中断 信号 中断选择寄存器
VICIntSelect 中断使能寄存器
VICIntEnable
中断使能清零寄存器 VICIntEnClr
中断源 [31:0]
软件中断使能寄存器 VICSoftInt
软件中断清零寄存器 VICSoftIntClear
FIQ中断状态寄存器 VICFIQStatus 中断状态寄存器
VICRawIntr IRQ
FIQ
中断选择寄存器 VICIntSelect 中断使能寄存器
VICIntEnable
中断使能清零寄存器 VICIntEnClr
中断源 [31:0]
软件中断使能寄存器 VICSoftInt
软件中断清零寄存器
VICSoftIntClear 中断状态寄存器
VICRawIntr IRQ
FIQ
名称 描述 访问 复位值 地址
VICIntEnable 中断使能寄存器
控制32个中断请求(包括软件中断)的使能 R/W 0 0xFFFF F010 VICSoftIntClear 软件中断清零寄存器
禁止对应通道的软件中断 W 0 0xFFFF F01C
• 寄存器描述-控制寄存器
• 控制寄存器功能描述
4.3 向量中断控制器
控制寄存器 功能描述
VICIntEnable
使能(禁止)中断源产生中断 VICIntEnClr
VICIntSelect 中断类型选择:FIQ & IRQ VICSoftInt
软件中断设置寄存器 VICSoftIntClear
FIQ中断
向量IRQ中断 非向量IRQ中断 中断源0
中断源1
……
中断源31
VIC 将32个 中断输入 进行分配
向量 VICVectCntl0
向量地址0寄存器 VICVectAddr0
默认向量地址寄存器 VICDefVectAddr
向量 VICVectCntl15
向量地址15寄存器 VICVectAddr15
向量地址寄存器 VICVectAddr
• 寄存器描述-参数设置寄存器
名称 描述 复位置 地址
VICVectCntl0
~
VICVectCntl15
向量控制0寄存器 VICVectAddr0
~
VICVectAddr15
向量地址0寄存器
• IRQ中断特点
4.3 向量中断控制器
特点 区别
向量 IRQ
l 支持16个向量IRQ中断;
l 16个优先级;
l 每个优先级指定一个服务程序入口地址。
能为每个向量IRQ中断源 设置服务程序地址。
非向量 IRQ
l 支持1个非向量IRQ中断;
l 所有非向量IRQ的入口地址都相同。
所有的非向量IRQ中断都 共用一个相同的服务程 序入口地址。
• IRQ中断相关寄存器
4.3 向量中断控制器
寄存器名称 功能
VICVectCntl0~15 为中断源分配向量IRQ中断的优先级。
VICVectAddr0~15 为该中断优先级设置服务程序入口地址。
VICDefVectAddr 设置非向量中断服务程序的入口地址。
注意:如果将同⼀一个中断源分配给多个使能的向 量IRQ中断,那么该中断源发生中断时,会使用最高 优先级(最低编号)的寄存器设置。
• 产生中断后的服务程序地址
4.3 向量中断控制器
向量IRQ中断 发生向量IRQ中断后,VIC将对应的向量地址寄 存器中的数据存入VICVectAddr寄存器中。
非向量IRQ中断 发生非向量IRQ中断后,VIC将默认向量地址寄 存器中的数据存入VICVectAddr寄存器中
IRQ中断状态寄存器 VICIRQStatus
中断选择寄存器 VICIntSelect 中断使能寄存器
VICIntEnable
中断使能清零寄存器 VICIntEnClr
中断源 [31:0]
软件中断使能寄存器 VICSoftInt
软件中断清零寄存器 VICSoftIntClear
FIQ中断状态寄存器 VICFIQStatus 中断状态寄存器
VICRawIntr IRQ
FIQ
• 寄存器描述-状态寄存器
名称 描述 访问 复位值 地址
VICIRQStatus IRQ状态寄存器
该寄存器读出定义为IRQ并使能的中断的状态 RO 0 0xFFFF F000 VICFIQStatus FIQ状态请求
该寄存器读出定义为FIQ并使能的中断的状态 RO 0 0xFFFF F004 VICRawIntr
所有中断的状态寄存器 该寄存器
读出32个中断请求/软件中断的状态,不管中 断是否使能或分类
RO 0 0xFFFF F008
注意:读取VICRawIntr寄存器将得到所有32个中断请 求和软件中断的状态,它不管中断是否使能或分类 。
• 保护使能寄存器
4.3 向量中断控制器
保护使能寄存器(VICProtection ):
位 [31:1] 0
功能 — 当该位为1时,只能在特权模式下访问VIC寄存器。
在某些场合可能需要禁止在用户模式下访问 VIC寄存器,以提高软件的安全等级。
• FIQ中断处理
4.3 向量中断控制器
SPSR_fiq = CPSR 1
2 CPSR = nzcvqIFt_fiq