本帖最后由 mengjunok 于 2011-3-13 16:11 编辑
对于LPC213X共有32个中断处理请求,既有32个中断通道。每个通道对应32位寄存器中的一位。其芯片内部有20个中断源,每个中断源对应一个中断通道。 这32个中断通道均可通过对软中断寄存器“VICSoftInt”相应位置“1”强制产生与该位相关的中断请求(即软中断请求),并可通过向软中断清零寄存器VICSoftIntClear”相应位置“1”清零软件中断寄存器的相应位,并解除强制的中断请求。这里的软中断与软件中断是不同的,软件中断是一个异常,通过调用“VIC”或“SWI”命令产生,此时系统进入管理模式。
通过对中断选择寄存器“VICIntSelect”相应位置“1”可将该中断源分配为“FIQ”中断,“FIQ”中断具有最高优先级。其余的则被分配为“IRQ”中断。一般情况下只将一个中高端源设为“FIQ”中断,以保证“FIQ”中断的响应速度。
“IRQ”中断又分为“向量IRQ”中断和“非向量IRQ”中断。
“向量IRQ”中断最多只能有16个,每一个对应一个向量控制寄存器“VICVectCtrl”和16个向量地址寄存器“VICVectAddr0~15”中的一个,并分别对应16个优先级。这16个向量控制寄存器的0到4位称为IRQslot,通过将向量控制寄存器的IRQslot设定为某一“IRQ”中断源的序号,来将某一IRQ中断源设定为“向量IRQ”中断,并同时获得了这个向量控制寄存器对应的优先级。将向量控制寄存器的第5位置“1”使该“向量IRQ”中断使能,当分配的中断请求或软件中断使能,在向量控制寄存器中禁止一个“向量IRQ”中断不会禁止中断本身,中断只是变为非向量的形式。
在程序中要将每个“向量IRQ”中断的服务程序地址保存到向量地址寄存器“VICVectAddr0~15”相应的一个中,当产生该向量中断时,该寄存器的值会自动复制到向量地址寄存器“VICVectAddr”中,从而自动调用该中断服务程序。
未被分配为“向量IRQ”的“IRQ”中断就成为“非向量IRQ”中断。 所有的“非向量IRQ”对应默认向量地址寄存器“VICDefVectAddr”既只有一个服务程序地址,在程序中将非向量中断服务程序的地址保存在该寄存器中,当“非向量 IRQ 中断”发生时,该寄存器的值将会被拷贝到“VICVectAddr” 中,程序根据VICVectAddr 中的地址进行跳转。 |