在ARM中,中断是有IRQ(普通中断)和FIQ(快速中断)。FIQ的优先级要高于IRQ。
中断的工作方式如下:
中断是异常模式,当一旦有中断发生,那么就会停止现在正在进行执行的程序,PC指针进而跳入异常向量的地址处。异常地址处,一般存有中断服务子程序的地址,所以,接下来PC指针跳入中断服务子程序中。当完成中断服务子程序后,PC指针会返回到被 打断的程序的下一条地址处,继续执行程序。
在写程序中,如何实现地址的跳转,举例如下:
汇编
_ISR_STARTADDRESS EQU 0x33ffff00
// 中断服务启动栈地址
如果是定时中断
定义定时中断服务子程序:
void __irq Timer1_ISR( void )
{
........ //函数体省略
}
现在要把定时中断的服务子程序与定时向量关联在一起,即PC指针指向定时中断向量,进而跳转到定时服务子程序中,过程如下:
pISR_TIMER1 EQU (_ISR_STARTADDRESS+0x4c)
pISR_TIMER1 = (int)Timer1_ISR; //这一步就是把定时中断服务子程序的地址放入定时中断向量中。
整个中断跳转程序就是这样的过程。