当前位置: 代码迷 >> WinCE >> 请问关于Micro2440的userkey驱动的调用
  详细解决方案

请问关于Micro2440的userkey驱动的调用

热度:273   发布时间:2016-04-28 13:49:54.0
请教关于Micro2440的userkey驱动的调用
又来CSDN请教了,呵呵,首先感谢先前回帖者!你们的回复对我帮助很大,呵呵!
我用的是Micro2440的板子,WinCE5.0的BSP。在D:\WINCE500\PLATFORM\mini2440\Src\Drivers\Userkey下面有对应开发板上面的6个用户按键的驱动,驱动程序把他们设置成了TAB键,RIGHT DOWN,LEFT DOWN ,ENTER,RIGHT,LEFT等六个功能键,主要程序如下(完整代码见Micro2440和mini2440驱动原文件(部分非关键函数省略)):

#include <windows.h>
//#include <ceddk.h>
#include <nkintr.h>
//#include <oalintr.h>
#include <pm.h>
#include "pmplatform.h"
#include "Pkfuncs.h"
#include "s2440.h"


volatile IOPreg *s2440IOP = (IOPreg *)IOP_BASE;
volatile INTreg *s2440INT = (INTreg *)INT_BASE;
UINT32 g_KeySysIntr[6];
HANDLE KeyThread;
HANDLE KeyEvent;

void Virtual_Alloc(); // Virtual allocation
DWORD UserKeyProcessThread(void);

DWORD UserKeyProcessThread(void)
{
UINT32 IRQ;

  KeyEvent = CreateEvent(NULL, FALSE, FALSE, NULL);  
  if (!KeyEvent) {
  RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to create event.\r\n")));
  return FALSE;
  }

IRQ = 36; //IRQ_EINT8;
  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 = 39; //IRQ_EINT11;
  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 = 41; //IRQ_EINT13;
  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 = 42; //IRQ_EINT14;
  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;
  }


IRQ = 43; //IRQ_EINT15;
  if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[4], sizeof(UINT32), NULL)) {
  RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
  return FALSE;
  }


IRQ = 47; //IRQ_EINT19;
  if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &IRQ, sizeof(UINT32), &g_KeySysIntr[5], sizeof(UINT32), NULL)) {
  RETAILMSG(1, (TEXT("ERROR: kEYBD: Failed to request sysintr value.\r\n")));
  return FALSE;
  }

  if (!InterruptInitialize(g_KeySysIntr[0], KeyEvent, NULL, 0)) {
  RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
  return FALSE;
  }  

  if (!InterruptInitialize(g_KeySysIntr[1], KeyEvent, NULL, 0)) {
  RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
  return FALSE;
  }  
  if (!InterruptInitialize(g_KeySysIntr[2], KeyEvent, NULL, 0)) {
  RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
  return FALSE;
  }  
  if (!InterruptInitialize(g_KeySysIntr[3], KeyEvent, NULL, 0)) {
  RETAILMSG(1,(TEXT("Fail to initialize userkey interrupt event\r\n")));
  相关解决方案