关于中断处理
LPC2131 使用的ARM PrimeCell向量中断控制器将所有的中断分为三种:
FIRQ IRQ向量中断 IRQ非向量中断,最多可支持32个中断输入。而我们使用的EasyARM2131开发板提供了21个中断源。
FIRQ有最高的优先级
IRQ向量中断次之
IRQ非向量中断优先级最低
其中IRQ向量中断:最多可定义16个,支持优先级策略,优先级设置通过将中断源编号置入VICVectCntX寄存器来完成,X数字越低,优先级越高,对应的中断服务程序地址置于相应的VICVectAddrX中。在IRQ中断产生时,根据优先级,应得到处理的高优先级中断的服务程序地址将被拷贝到VICVectAddr中。
IRQ非向量中断:不支持优先级,其服务程序地址被置于默认向量地址寄存器 VICDefVectAddr 中,在有中断请求时会拷贝到VICVectAddr中,具体是哪个中断源发出的请求,需要在服务程序中,通过查询VICIRQStatus判断哪个中断源编号被置位来确定,这样服务程序会稍显臃肿。
以上说明非FIRQ中断,最终应进入的服务程序的地址会被写入VICVectAddr中。一旦产生IRQ中断,微控制器会切换到IRQ模式,并跳转到向量表0x00000018处执行,如代码列表(1)处所示,因为ARM7TDMI是3级流水线,因而PC的值应为0x00000020, 减去0xff0为0xfffff030恰好是VICVectAddr的地址。这样用这条指令便可进入中断处理程序
对于FIQ,因为一般其对响应速度要求较高,所以一般只定义一个。与IRQ非向量中断类似,如果多于一个,则应在服务程序中读取VICFIQStatus来确定中断源,FIQ的中断服务程序定义在FIQ_Handler中。一旦产生FIQ中断,处理器会切换到FIQ迷失并跳转带0x0000001C地址执行程序,最终将跳到FIQ_Handler标号处,处理FIQ中断
LPC2131 使用的ARM PrimeCell向量中断控制器将所有的中断分为三种:
FIRQ IRQ向量中断 IRQ非向量中断,最多可支持32个中断输入。而我们使用的EasyARM2131开发板提供了21个中断源。
FIRQ有最高的优先级
IRQ向量中断次之
IRQ非向量中断优先级最低
其中IRQ向量中断:最多可定义16个,支持优先级策略,优先级设置通过将中断源编号置入VICVectCntX寄存器来完成,X数字越低,优先级越高,对应的中断服务程序地址置于相应的VICVectAddrX中。在IRQ中断产生时,根据优先级,应得到处理的高优先级中断的服务程序地址将被拷贝到VICVectAddr中。
IRQ非向量中断:不支持优先级,其服务程序地址被置于默认向量地址寄存器 VICDefVectAddr 中,在有中断请求时会拷贝到VICVectAddr中,具体是哪个中断源发出的请求,需要在服务程序中,通过查询VICIRQStatus判断哪个中断源编号被置位来确定,这样服务程序会稍显臃肿。
以上说明非FIRQ中断,最终应进入的服务程序的地址会被写入VICVectAddr中。一旦产生IRQ中断,微控制器会切换到IRQ模式,并跳转到向量表0x00000018处执行,如代码列表(1)处所示,因为ARM7TDMI是3级流水线,因而PC的值应为0x00000020, 减去0xff0为0xfffff030恰好是VICVectAddr的地址。这样用这条指令便可进入中断处理程序
对于FIQ,因为一般其对响应速度要求较高,所以一般只定义一个。与IRQ非向量中断类似,如果多于一个,则应在服务程序中读取VICFIQStatus来确定中断源,FIQ的中断服务程序定义在FIQ_Handler中。一旦产生FIQ中断,处理器会切换到FIQ迷失并跳转带0x0000001C地址执行程序,最终将跳到FIQ_Handler标号处,处理FIQ中断