天嵌 ARM开发社区

 找回密码
 注册
查看: 3380|回复: 1

WINCE 外部中断

[复制链接]
dyyou 发表于 2011-1-7 09:37:47 | 显示全部楼层 |阅读模式
请问大家,以下是外部中断的驱动,请问我在应用程序上怎么读取各个中断那????
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有中断 那么我在应用程序上用什么函数读取是否发生中断那                                            
                }
        }
}
天嵌_support1 发表于 2011-1-7 11:14:32 | 显示全部楼层
1# dyyou


在那个相应的驱动目录下都有一个 .def 文件来声明了驱动接口的函数了呀:

LIBRARY EINTDriver
EXPORTS
        INT_Close
        INT_Deinit
        INT_Init
        INT_IOControl
        INT_Open
        INT_PowerDown
        INT_PowerUp
        INT_Read
        INT_Seek
        INT_Write
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-17 00:42 , Processed in 1.062500 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表