|
请问大家,以下是外部中断的驱动,请问我在应用程序上怎么读取各个中断那????
DWORD IntProcessThread(void)
{
UINT32 IRQ;
IntEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!IntEvent)
{
RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to create event.\r\n")));
return FALSE;
}
IRQ = 1; //IRQ_EINT1;
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[0], sizeof(UINT32), NULL))
{
RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
return FALSE;
}
IRQ = 32; //IRQ_EINT4;
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[1], sizeof(UINT32), NULL))
{
RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
return FALSE;
}
IRQ = 2; //IRQ_EINT2;
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[2], sizeof(UINT32), NULL))
{
RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
return FALSE;
}
IRQ = 0; //IRQ_EINT0;
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[3], sizeof(UINT32), NULL))
{
RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
return FALSE;
}
if (!InterruptInitialize(g_KeySysIntr[0], IntEvent, NULL, 0))
{
RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
return FALSE;
}
if (!InterruptInitialize(g_KeySysIntr[1], IntEvent, NULL, 0))
{
RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
return FALSE;
}
if (!InterruptInitialize(g_KeySysIntr[2], IntEvent, NULL, 0))
{
RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
return FALSE;
}
if (!InterruptInitialize(g_KeySysIntr[3], IntEvent, NULL, 0))
{
RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
return FALSE;
}
while(1)
{
WaitForSingleObject(IntEvent, INFINITE);
RETAILMSG(0,(L"INTMASK=%X, EINTMASK=%X, GPGCON=%X\r\n", v_pINTRregs->INTMSK, v_pIOPregs->EINTMASK, v_pIOPregs->GPFCON));
//EINT1 - K1 - VK_UP - 0x26
if(v_pINTRregs->INTMSK & (1<<IRQ_EINT1))
{
RETAILMSG(1,(TEXT("[Key1 - UP]\r\n")));
keybd_event(VK_UP ,0x26, 0, 0);
Sleep(30);
keybd_event(VK_UP ,0x26, KEYEVENTF_KEYUP, 0);
InterruptDone(g_KeySysIntr[0]);
}
//EINT4 - K2 - VK_DOWN - 0x28
if(v_pIOPregs->EINTMASK & (1<<IRQ_EINT4_7))
{
RETAILMSG(1,(TEXT("[Key2 - DOWN]\r\n")));
keybd_event(VK_DOWN ,0x28, 0, 0);
Sleep(30);
keybd_event(VK_DOWN ,0x28, KEYEVENTF_KEYUP, 0);
InterruptDone(g_KeySysIntr[1]);
}
//EINT2 - K3 - VK_LEFT - 0x25
if(v_pINTRregs->INTMSK & (1<<IRQ_EINT2))
{
RETAILMSG(1,(TEXT("[K3 - LEFT]\r\n")));
keybd_event(VK_LEFT ,0x25, 0, 0);
Sleep(30);
keybd_event(VK_LEFT ,0x25, KEYEVENTF_KEYUP, 0);
InterruptDone(g_KeySysIntr[2]);
}
//EINT0 - K4 - VK_RIGHT - 0x27
if(v_pINTRregs->INTMSK & (1<<IRQ_EINT0))
{
RETAILMSG(1,(TEXT("[K4 - RIGHT]\r\n")));
keybd_event(VK_RIGHT ,0x27, 0, 0);
Sleep(30);
keybd_event(VK_RIGHT ,0x27, KEYEVENTF_KEYUP, 0);
InterruptDone(g_KeySysIntr[3]);
//假如EINT0有中断 那么我在应用程序上用什么函数读取是否发生中断那
}
}
} |
|