XDMA设备在WINDOWS下的驱动编程
qq_45020064:
博主您好,最近也在学习xdma相关的东西,遇到一个问题,对于msi中断,理论上是板卡发出某个user_irq_req[15:0]请求后,xdma IP核会根据发出的用户中断号(比如user_irq_req[15:0] == 16'd2,那就是用户中断1发出),然后结合xdma IP内部的User Vector Number寄存器中的向量号(比如用户中断1对应的中断向量号是1),将msi中断发到上位机;参照官方以及网上的一些资料,对于上位机的中断处理,都是利用:
DWORD WINAPI thread_event3(LPVOID lpParam)
{
BYTE val0[1] = "";
DWORD i = 0;
BYTE statu;
char* device_name1 = "\\event_3";
HANDLE h_event3 = open_devices(base_path, device_name1, GENERIC_READ);
while (1)
{
if (start_en) {
read_device(h_event3, 0, 1, val0);//waite irq
Sleep(1);
if (val0[0] == 1)
printf("event_3 done!\n");
else
printf("event_3 timeout!\n");
i++;
}
}
CloseHandle(h_event3);
return 0;
}
上述代码的方式来判断是否有中断发生,但是上述的方式感觉就是不断的查询来获取中断,而不是MSI中断的处理方式。
想请教下博主,上位机对于MSI中断的处理,需要如何实现呢?
感谢!!
|