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);
}