关于中断的问题

VMIC卡的通信问题
上位机运行windows,下位机QNX。上位机利用中断机制向下位机发数据。
写了一段中断程序,采用的是将中断服务子程序与中断号绑定的方式。但是程序进入等中断后就直接跳出了,也没有进入中断服务子程序。一旦上位机向下位机发送数据就造成下位机死机。不知道问题出在哪?
这里我贴出关于中断部分的程序段,麻烦各位高人看看是不是这部分程序写错了。现行谢过了。
主程序中:pthread_create(NULL, NULL, VMIC_interrupt, NULL);

void* VMIC_interrupt(void* arg)
{
ThreadCtl(_NTO_TCTL_IO, 0);
	
id = InterruptAttach(VMIC_irq, VMIC_ISR, NULL, 0, _NTO_INTR_FLAGS_PROCESS);
printf("Attach Done\n");
while(1)
{
 printf("while\n");
 InterruptWait(NULL, NULL);//到此程序跳出中断,主程序顺序执行至结束
 InterruptUnmask(VMIC_irq, id);	
}
}


const struct sigevent* VMIC_ISR(void* arg, int id)
{
/*Register/Device memory access need to be volatile*/
volatile uint32_t *tmp;
/*printf("ISR\n");*/
		
event.sigev_notify = SIGEV_INTR;
tmp = (uint32_t *)(ptr0 + 0x68);
if((*tmp && 0x4000) == 0)
{
return(&event);	/*not active*/
}
	
tmp =  (uint32_t *)(ptr2 + 0x10);	/*Interruption type*/
if((*tmp && 0x1) != 1)
{
return(&event);
}
	
/*Read Data*/
tmp =  (uint32_t *)(ptr3 + 0x0);
printf("value is \t%d\n", *tmp);
InterruptMask(VMIC_irq, id);	
return(&event);
}

我对程序做了修改:
对结构体event进行了初始化;
将读数据部分从ISR中移除,移至VMIC_interrupt中;
添加了InterruptDetach。
现在程序只在第一次时可以响应中断,而且进入中断后死循环,强行终止程序后不再响应中断,也不死机。
郁闷……
修改后的程序如下:
主程序pthread_create(NULL, NULL, VMIC_interrupt, NULL);

void* VMIC_interrupt(void* arg)
{
	ThreadCtl(_NTO_TCTL_IO, 0);
	
	id = InterruptAttach(VMIC_irq, VMIC_ISR, NULL, 0, _NTO_INTR_FLAGS_PROCESS);
	printf("Attach Done\n");
	while(1)
	{
		printf("while\n");
		InterruptWait(NULL, NULL);
		/*Read Data*/
		tmp =  (uint32_t *)(ptr3 + 0x0);
		printf("value is \t%d\n", *tmp);
		InterruptUnmask(VMIC_irq, id);	
	}
	InterruptDetach(id);
}


const struct sigevent* VMIC_ISR(void* arg, int id)
{
	/*Register/Device memory access need to be volatile*/
	volatile uint32_t *tmp;
		
	event.sigev_notify = SIGEV_INTR;
	tmp = (uint32_t *)(ptr0 + 0x68);
	if((*tmp && 0x4000) == 0)
	{
		return(NULL);	/*not active*/
	}
	
	tmp =  (uint32_t *)(ptr2 + 0x10);	/*Interruption type*/
	if((*tmp && 0x1) != 1)
	{
		return(NULL);
	}
	InterruptMask(VMIC_irq, id);	
	return(&event);
}