Esempio n. 1
0
// 通用中断处理函数
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)();
}
Esempio n. 2
0
File: trap.c Progetto: LiXinKing/kos
// 通用中断处理函数,这里是中断函数的第二个跳转点,即从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);
}