资源说明:LPC中的中断处理小结
本文总结了LPC中的中断处理机制,并与ARM体系进行了比较,讨论了LPC2294的EXT中断分类、ARM体系中的中断定义、LPC的SFR(特殊功能寄存器)中VIC寄存器的作用、LPC中断的特殊性等知识点。
一、LPC2294的EXT中断分类
LPC2294的EXT中断可以分为三类:FIQ(Fast Interrupt)、Vectored IRQ(可 vector 的IRQ)和non-Vectored IRQ(不可vector的IRQ),其中FIQ的优先级最高,而non-Vectored IRQ的优先级最低。系统提供了27个中断源,并对这些中断源进行了固定的编号,但该编号与优先级没有任何关系。
二、ARM体系中的中断定义
在ARM体系中,有SWI(Software Interrupt)、FIQ(Fast Interrupt)和IRQ(Interrupt Request)等中断定义,并且已经定义了这些中断的开关控制位。这些控制位位于CPSR寄存器中,其中I位用于控制IRQ中断的开关,F位用于控制FIQ的开关。但是,CPSR寄存器的读取和修改在用户模式下是不能完成的,必须要通过SWI指令进入到特权模式下才可以进行修改。
三、LPC的SFR(特殊功能寄存器)中的VIC寄存器
在LPC的SFR(特殊功能寄存器)中,提供了一组寄存器用于控制相应的中断的进行,这组寄存器叫做VIC寄存器。VIC寄存器包括了所有与中断有关的设置、开启、分类等功能。VIC寄存器的掌握是非常重要的!
四、LPC中断的特殊性
LPC中断的处理机制与ARM体系的中断机制不同。在LPC中,FIQ的中断和普通的ARM规定是没有任何区别的,即是在产生中断时,指令跳转到0x0000001C处开始执行。但是IRQ的响应过程就不同了,IRQ的入口地址并不是直接写在这条语句中,而是放在一个寄存器中,该寄存器是VICVectAddr。
五、IRQ的响应过程
在IRQ的响应过程中,程序的入口地址不是直接写在这条语句中,而是放在VICVectAddr寄存器中。VICVectAddr寄存器的地址是0xFFFFF030。在执行语句“LDRPC, [PC,#-0xFF0]”时,PC的值已经变为该语句的后面第二条语句的地址了,也就是0x00000020,而0x00000020-0xFF0时,发生借位,其结果恰好为0xFFFFF030。这样就简单的完成了IRQ的跳转。
LPC中的中断处理机制具有自己的特点,需要了解LPC2294的EXT中断分类、ARM体系中的中断定义、LPC的SFR(特殊功能寄存器)中的VIC寄存器的作用、LPC中断的特殊性等知识点,才能更好地理解和应用LPC中的中断处理机制。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。