반응형
InterruptInitialize()의 간단 사용법을 알수있는 예제...
DWORD IOP_IntrThread(PVOID pArg)
{
IOP_InitializeAddresses();
IOP_EnableInterrupt();
gRs485IntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_RS485Irq, sizeof(UINT32), &g_RS485SysIntr, sizeof(UINT32), NULL))
{
RETAILMSG(DEBUGMODE, (TEXT(ERROR RS485 Interrupt Initialize - Failrn)));
return(0);
}
RETAILMSG(1,(TEXT( INFO Uart485 Mapped Irq 0x%x to, SysIntr 0x%x. !!! rn), g_RS485Irq, g_RS485SysIntr));
if (!(InterruptInitialize(g_RS485SysIntr, gRs485IntrEvent, 0, 0)))
{
RETAILMSG(DEBUGMODE, (TEXT(ERROR RS485 Interrupt Initialize - Failrn)));
}
else RETAILMSG(DEBUGMODE, (TEXT( RS485 Interrupt Initialize - Success !!! rn)));
while (1)
{
WaitForSingleObject(gRs485IntrEvent, INFINITE);
RETAILMSG(DEBUGMODE,(TEXT( Test 485 interrupt ok rn)));
// Interrupt process code
v_pINTRregs-SRCPND = BIT_UART1;
v_pINTRregs-SUBSRCPND = BIT_SUB_RXD1;
v_pINTRregs-INTPND = BIT_UART1;
while(!(v_pUARTregs-UTRSTAT & 0x1));
TempBuffer[TempCount] = (v_pUARTregs-URXH);
TempCount++;
InterruptDone(g_RS485SysIntr);
}
}
{
IOP_InitializeAddresses();
IOP_EnableInterrupt();
gRs485IntrEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &g_RS485Irq, sizeof(UINT32), &g_RS485SysIntr, sizeof(UINT32), NULL))
{
RETAILMSG(DEBUGMODE, (TEXT(ERROR RS485 Interrupt Initialize - Failrn)));
return(0);
}
RETAILMSG(1,(TEXT( INFO Uart485 Mapped Irq 0x%x to, SysIntr 0x%x. !!! rn), g_RS485Irq, g_RS485SysIntr));
if (!(InterruptInitialize(g_RS485SysIntr, gRs485IntrEvent, 0, 0)))
{
RETAILMSG(DEBUGMODE, (TEXT(ERROR RS485 Interrupt Initialize - Failrn)));
}
else RETAILMSG(DEBUGMODE, (TEXT( RS485 Interrupt Initialize - Success !!! rn)));
while (1)
{
WaitForSingleObject(gRs485IntrEvent, INFINITE);
RETAILMSG(DEBUGMODE,(TEXT( Test 485 interrupt ok rn)));
// Interrupt process code
v_pINTRregs-SRCPND = BIT_UART1;
v_pINTRregs-SUBSRCPND = BIT_SUB_RXD1;
v_pINTRregs-INTPND = BIT_UART1;
while(!(v_pUARTregs-UTRSTAT & 0x1));
TempBuffer[TempCount] = (v_pUARTregs-URXH);
TempCount++;
InterruptDone(g_RS485SysIntr);
}
}
반응형