求高人指点WINCE6的外部中断使用

MEIDANZON MEIDANZON 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
自己按照IIC总线驱动改的


#include "stdafx.h"
#include <s3c6410.h>
#include <types.h>
#include <DrvLib.h>
#include <winuser.h>
#include "windows.h"
#include <oal_intr.h>
#include <nkintr.h>
#include <pm.h>
#include <bsp_cfg.h>
#include "ANY.h"

#define MSG_ERROR 1
#define KEY_RUN 10
#define KEY_STOP 0

static volatile S3C6410_GPIO_REG *g_pGPIOReg;
static volatile S3C6410_SYSCON_REG *g_pSYSCONReg;
static HANDLE g_hKeyEvent;
static HANDLE g_hKeyThread;
static DWORD g_IntrKey=SYSINTR_NOP;
static DWORD KEY_IST(LPVOID Context);
static DWORD pInitContext;
//----------------------------------------------------------------------------//
// DLL entry //
//----------------------------------------------------------------------------//
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:

break;
case DLL_PROCESS_DETACH:

break;
case DLL_THREAD_ATTACH:

break;
case DLL_THREAD_DETACH:

break;
default:
break;
}

return TRUE;
}
void InitializeGPIOPort(void)
{
g_pGPIOReg->GPNCON = (g_pGPIOReg->GPNCON & ~(0xf)) | (0x2);

g_pGPIOReg->GPNPUD = (g_pGPIOReg->GPNPUD & ~(0x3)) | (0x0);
}

DWORD ANY_Init(LPCTSTR pContext, LPCVOID lpvBusContext) {

unsigned int Irq;
pInitContext=KEY_RUN;
g_pGPIOReg = (S3C6410_GPIO_REG*)DrvLib_MapIoSpace(S3C6410_BASE_REG_PA_GPIO,sizeof(S3C6410_GPIO_REG),FALSE);
g_pSYSCONReg = (S3C6410_SYSCON_REG*)DrvLib_MapIoSpace(S3C6410_BASE_REG_PA_SYSCON,sizeof(S3C6410_SYSCON_REG), FALSE);
InitializeGPIOPort();
g_hKeyEvent = CreateEvent(0,FALSE,FALSE,NULL);
Irq = IRQ_EINT0;
if (!KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &Irq, sizeof(UINT32), &g_IntrKey, sizeof(UINT32), NULL))
{
g_IntrKey= SYSINTR_UNDEFINED;
return 0;
}
if( !InterruptInitialize(g_IntrKey, g_hKeyEvent, NULL, 0) )
{
return(FALSE);
}
if ( (g_hKeyThread = CreateThread(NULL, 0, KEY_IST, (LPVOID)pInitContext, 0, NULL)) == NULL)
{
return(FALSE);
}
if ( !CeSetThreadPriority(g_hKeyThread, 100))
{
return(FALSE);
}

return 1;
}


BOOL ANY_Deinit(DWORD hDeviceContext) {
VirtualFree((PVOID)g_pGPIOReg, 0, MEM_RELEASE);
g_pGPIOReg = NULL;
return TRUE;
}


DWORD ANY_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode) {
OutputDebugString(L"LED - LED Open\n");

return 1;
}

BOOL ANY_Close(DWORD hOpenContext) {
OutputDebugString(L"LED - LED Close\n");

return TRUE;
}


DWORD ANY_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count) {
return 1;
}


DWORD ANY_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count) {
return 1;
}


VOID ANY_PowerUp(DWORD hDeviceContext) {
}


VOID ANY_PowerDown(DWORD hDeviceContext) {
}


DWORD ANY_Seek(DWORD hOpenContext, long Amount, DWORD Type) {
return 0;
}


BOOL ANY_IOControl(DWORD Handle,
DWORD dwIoControlCode,
PBYTE pInBuf,
DWORD nInBufSize,
PBYTE pOutBuf,
DWORD nOutBufSize,
PDWORD pBytesReturned) {

return 0;
}


static DWORD
KEY_IST(
LPVOID Context
)
{
static DWORD dwTimeOut = INFINITE;
static DWORD pInitContext =(DWORD)Context;



while(1)
{
DWORD we;
we = WaitForSingleObject(g_hKeyEvent, dwTimeOut);
}

return 0;
}

...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
MEIDANZON
嵌入开发(WinCE) 19,524 成员 41,565 内容