// 通用中断处理函数 void irq_handler(void) { unsigned long vicaddr[4] = {VIC0ADDR,VIC1ADDR,VIC2ADDR,VIC3ADDR}; int i=0; void (*isr)(void) = NULL; for(; i<4; i++) { if(intc_getvicirqstatus(i) != 0) { isr = (void (*)(void)) vicaddr[i]; break; } } (*isr)(); }
// 通用中断处理函数,这里是中断函数的第二个跳转点,即从start.S到这里 void exceptionirq(unsigned long pl) { putc('m'); printf("irq not defined.\n"); unsigned long tmp=1; unsigned long tt=1; asm("mov %0,sp\n":"=r"(tmp)); asm("mrs %0,CPSR\n":"=r"(tt)); printf("%X\n",tmp); printf("tt %X\n",tt); unsigned long vicaddr[4] = {VIC0ADDR,VIC1ADDR,VIC2ADDR,VIC3ADDR}; int i=0; void (*isr)(unsigned long) = NULL; for(; i<4; i++) { if(intc_getvicirqstatus(i) != 0) { isr = (void (*)(unsigned long)) vicaddr[i]; break; } } (*isr)(pl); }