原创 LPC2103之中断向量控制器

2009-3-4 20:20 6488 9 9 分类: MCU/ 嵌入式

Vectored Interrupt Controller (VIC)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


中断向量控制器Vectored Interrupt Controller (VIC) 控制32个中断请求输入,并且可编程的将这些中断分成三类:FIQ, vectored IRQ, and non-vectored IRQ


快速中断请求Fast Interrupt reQuest (FIQ)有最高的优先级。如果有一个以上的请求被分配到FIQVIC将它们的请求相或以产生FIQ信号给ARM处理器。当只有一个中断请求分配给FIQ时,将会产生一个最短的可能的FIQ延时(即达到最快的中断请求时间),因为FIQ服务程序单单处理这个中断。但是如果多个中断分配给FIQFIQ服务程序必需读VIC寄存器以识别是哪个中断产生了FIQ请求。


Vectored IRQs处于中等优先级,但32个中断请求中只有16个可以分配到这个类中。32个中断请求中的任何一个都可以分配到16vectored IRQ slots中的任意一个。这些槽(slots)中的slot 0具有最高优先级而slot 15为最低优先级。


Non-vectored IRQs 处于最低优先级。


 


         VIC将所有的Vectored IRQsVectored IRQs请求相或后产生的IRQ信号传递给ARM处理器。IRQ服务程序通过读VIC的相关寄存器并开始跳转。如果vectored IRQs产生请求,VIC将提供具有最高优先级的IRQs服务程序的地址,否则它会提供所有non-vectored IRQs共用的默认程序地址。默认程序可以读出另一个VIC寄存器看看是哪个IRQs激活了。


 


/* Vectored Interrupt Controller (VIC) */


/* 向量中断控制器(VIC)的特殊寄存器 */


#define VICIRQStatus    (*((volatile unsigned long *) 0xFFFFF000))                         


// IRQ状态寄存器,该寄存器可以读出使能并且分配给IRQ的中断请求


#define VICFIQStatus    (*((volatile unsigned long *) 0xFFFFF004))                         


// FIQ状态寄存器,该寄存器可以读出使能并且分配给FIQ的中断请求


#define VICRawIntr      (*((volatile unsigned long *) 0xFFFFF008))                          


//原始中断状态寄存器,不论使能和分类,该寄存器都可读出所有32个中断请求/软件中断的情况


#define VICIntSelect    (*((volatile unsigned long *) 0xFFFFF00C))                           


//中断选择寄存器,将32个中断分类为IRQ或者FIQ


#define VICIntEnable    (*((volatile unsigned long *) 0xFFFFF010))                          


//中断使能寄存器


#define VICIntEnClr     (*((volatile unsigned long *) 0xFFFFF014))                           


//中断清除寄存器,写1清除相应中断请求


#define VICSoftInt      (*((volatile unsigned long *) 0xFFFFF018))                           


//软件中断寄存器,该寄存器内容与32个来自各种外设功能的中断请求相或


#define VICSoftIntClear (*((volatile unsigned long *) 0xFFFFF01C))                           


//软件中断清除寄存器,相应位写1清除软件中断寄存器中的一位或多位


#define VICProtection   (*((volatile unsigned long *) 0xFFFFF020))                          


//保护使能寄存器,该寄存器允许允许在特权模式下限制访问VIC寄存器


#define VICVectAddr     (*((volatile unsigned long *) 0xFFFFF030))                         


//向量地址寄存器,IRQ中断发生时,IRQ服务程序跳转到该寄存器读出的值


#define VICDefVectAddr  (*((volatile unsigned long *) 0xFFFFF034))                        


//默认向量地址寄存器,该寄存器保存non-vectored IRQs的中断服务程序(ISR)地址


#define VICVectAddr0    (*((volatile unsigned long *) 0xFFFFF100))                        


//向量地址0寄存器,0-15分别保存16vectored IRQ slots的中断服务程序(ISR)地址


#define VICVectAddr1    (*((volatile unsigned long *) 0xFFFFF104))                        


//向量地址1寄存器


#define VICVectAddr2    (*((volatile unsigned long *) 0xFFFFF108))                        


//向量地址2寄存器


#define VICVectAddr3    (*((volatile unsigned long *) 0xFFFFF10C))                        


//向量地址3寄存器


#define VICVectAddr4    (*((volatile unsigned long *) 0xFFFFF110))                        


//向量地址4寄存器


#define VICVectAddr5    (*((volatile unsigned long *) 0xFFFFF114))                        


//向量地址5寄存器


#define VICVectAddr6    (*((volatile unsigned long *) 0xFFFFF118))                        


//向量地址6寄存器


#define VICVectAddr7    (*((volatile unsigned long *) 0xFFFFF11C))                        


//向量地址7寄存器


#define VICVectAddr8    (*((volatile unsigned long *) 0xFFFFF120))                        


//向量地址8寄存器


#define VICVectAddr9    (*((volatile unsigned long *) 0xFFFFF124))                        


//向量地址9寄存器


#define VICVectAddr10   (*((volatile unsigned long *) 0xFFFFF128))                        


//向量地址10寄存器


#define VICVectAddr11   (*((volatile unsigned long *) 0xFFFFF12C))                        


//向量地址11寄存器


#define VICVectAddr12   (*((volatile unsigned long *) 0xFFFFF130))                        


//向量地址12寄存器


#define VICVectAddr13   (*((volatile unsigned long *) 0xFFFFF134))                        


//向量地址13寄存器


#define VICVectAddr14   (*((volatile unsigned long *) 0xFFFFF138))                        


//向量地址14寄存器


#define VICVectAddr15   (*((volatile unsigned long *) 0xFFFFF13C))                        


//向量地址15寄存器


#define VICVectCntl0    (*((volatile unsigned long *) 0xFFFFF200))                          


//向量控制0寄存器,向量控制寄存器0-15分别控制1616 vectored IRQ slots


#define VICVectCntl1    (*((volatile unsigned long *) 0xFFFFF204))                          


//向量控制1寄存器


#define VICVectCntl2    (*((volatile unsigned long *) 0xFFFFF208))                          


//向量控制2寄存器


#define VICVectCntl3    (*((volatile unsigned long *) 0xFFFFF20C))                         


//向量控制3寄存器


#define VICVectCntl4    (*((volatile unsigned long *) 0xFFFFF210))                   


//向量控制4寄存器


#define VICVectCntl5    (*((volatile unsigned long *) 0xFFFFF214))                          


//向量控制5寄存器


#define VICVectCntl6    (*((volatile unsigned long *) 0xFFFFF218))                          


//向量控制6寄存器


#define VICVectCntl7    (*((volatile unsigned long *) 0xFFFFF21C))                         


//向量控制7寄存器


#define VICVectCntl8    (*((volatile unsigned long *) 0xFFFFF220))                          


//向量控制8寄存器


#define VICVectCntl9    (*((volatile unsigned long *) 0xFFFFF224))                          


//向量控制9寄存器


#define VICVectCntl10   (*((volatile unsigned long *) 0xFFFFF228))                          


//向量控制10寄存器


#define VICVectCntl11   (*((volatile unsigned long *) 0xFFFFF22C))                         


//向量控制11寄存器


#define VICVectCntl12   (*((volatile unsigned long *) 0xFFFFF230))                          


//向量控制12寄存器


#define VICVectCntl13   (*((volatile unsigned long *) 0xFFFFF234))                          


//向量控制13寄存器


#define VICVectCntl14   (*((volatile unsigned long *) 0xFFFFF238))                          


//向量控制14寄存器


#define VICVectCntl15   (*((volatile unsigned long *) 0xFFFFF23C))                         


//向量控制15寄存器


 


 


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图 


 


Vector Control registers 0-15 (VICVectCntl0-15 - 0xFFFF F200-23C)


 




信号


描述


复位值


4:0


Int_request/


Sw_int_assig


该数值对应的中断分配到该 vectored IRQ slot


0


5


IRQslot_en


1表示该vectored IRQ slot使能


0


31:6


 


保留


NA


 


 


Protection Enable register (VICProtection - 0xFFFF F020)


 




信号


描述


复位值


0


VIC_access


0——用户模式和特权模式下均可访问VIC寄存器


1——只有在特权模式下才可访问VIC寄存器


0


31:1


 


保留


NA


 


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条