Windows CE S3C440A LED驱动编码分析

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

    

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

Windows CE S3C440A LED驱动编码分析_第1张图片 

    从这里可以看住,这四个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 CE S3C440A LED驱动编码分析)