中断时异常的一种。
异常向量表,可以放到0x00000000或者放到0x300000008
保存和恢复其他模式的现场:
保存现场:
1.设置IRQ栈 2.保存LR 3.保存r0-r12
IRQ handle:
1. ldr sp, =IRQ_STACK
2.中断返回的PC保存在LR中,CPSR(自动)保存在(IRQ模式下)SPSR下。 sub lr,lr,#4
3.保存r0-r12,lr到irq模式下的栈上
stmfd sp!, {r0-r12,lr}
bl irq_handler
//处理完中断返回
ldmfd sp!, {r0-r12,pc}^ ^就是cpsr返回
第二个阶段irq_handler识别多个中断中的一个,然后调用中断处理流程
每个中断都有1个中断号,进入irq_handler后,先查阅中断源寄存器和子中断寄存器确定中断编号,然后用这个编号去中断isr数组中找到isr地址。
中断寄存器:可以读,但是写只能写中断enable,不能写中断disable
intselect irq还时fiq
irqstatus 只读 硬件自动设置该值表示中断发生了
priority0-priority31 中断嵌套,对实时性要求高的需要,比如单片机中比较重要,210中不重要
vecaddr0-vecaddr31 硬件自动识别中断号,找到地址,只读 避免软件查找中断源和isr
外部中断源(GPIO)
EIN0-EIN31