Windows CE S3C440A LED驱动编码分析

基于TQ2440硬件平台,该平台处理器S3C2440A,在这个平台当中存在四个LED,用于测试,显示其他硬件运行情况等。LED驱动是一个典型的I/O驱动,简单但健全,是学习Windows CE嵌入式平台的典型例子。首先我们来看看这个平台这这部分电路图吧!

image

这四个LED分别加了1K偶的电阻,另一端接3.3V电压,接下来看看核心板的接口。

image

从这里可以看住,这四个LED分别由GPB5、GPB6、GPB7和GPB8控制,都处于B组GPIO口。接下来介绍具体的编写过程,流驱动的固定接口如下;

GIO_Deinit、GIO_Init、GIO_IOControl、GIO_Open、GIO_Close等。

编写过程如下;

虚拟地址映射——》设置GPB I/O口为输出口——》调用GIO_IOControl进行控制——》关闭驱动。这几个过程中最重要的步骤是第一步,如下列出其代码;

v_pIOPregs = (volatile S3C2440A_IOPORT_REG *)VirtualAlloc(0, sizeof(S3C2440A_IOPORT_REG), MEM_RESERVE, PAGE_NOACCESS);
if (v_pIOPregs == NULL)
{
ERRORMSG(1,(TEXT("For IOPregs : VirtualAlloc faiGPIO!/r/n")));
RetValue = FALSE;
}
else
{
if (!VirtualCopy((PVOID)v_pIOPregs, (PVOID)(S3C2440A_BASE_REG_PA_IOPORT >> 8), sizeof(S3C2440A_IOPORT_REG), PAGE_PHYSICAL | PAGE_READWRITE | PAGE_NOCACHE))
{
ERRORMSG(1,(TEXT("For IOPregs: VirtualCopy faiGPIO!/r/n")));
RetValue = FALSE;
}
}

if (!RetValue)
{
if (v_pIOPregs)
{
VirtualFree((PVOID) v_pIOPregs, 0, MEM_RELEASE);
}

v_pIOPregs = NULL;
}

你可能感兴趣的:(windows)