1。 在<vect.s>中从“T0TIMI_Addr DCD T0TIMIIRQHandler“到“T0OC2_Addr DCD T0OC2IRQHandler”定义的是IRQ各个中断的实际处理程序的地址表。T0TIMI_Addr这变量的内容为T0TIMIIRQHandler,即<vect.s>后面部分中定义的函数T0TIMIIRQHandler。 timer0中断到来后,从IRQ模式下的IRQHandler跳到IRQ模式下的T0TIMIIRQHandler,再切换到SYS模式,然后跳到<71/91x_it.c>中的T0TIMI_IRQHandler
T0TIMIIRQHandler IRQ_to_SYS BL T0TIMI_IRQHandler SYS_to_IRQ 2。 在<71/91x_init.s>中的宏EIC_INIT MACRO和楼主用到的<eic.c>中的函数void EIC_Init(void)作用一样,初始化EIC模块的各个寄存器,尤其是SIR。当中断到来时,被响应的那个中断的处理程序地址就会在 IRQHandler 。。。 LDR r0, =EIC_base_addr LDR r1, =IVR_off_addr ADD pc,r0,r1 从SIR中硬件读取地址,放在IVR寄存器中,在此firmware读这个寄存器知道该向哪里跳转 请检查整个跳转过程的环节是否完整?
|