自己动手写TCC7901的GPIO驱动

//=====================================================================
//TITLE:
//    自己动手写TCC7901的GPIO驱动
//AUTHOR:
//    norains
//DATE:
//    Monday 12-July-2010
//Environment:
//    Windows CE 5.0 + TCC7901
//=====================================================================

    如果你使用的是WinCE,然后又涉及到GPIO的操作,你会很尴尬地发现,WinCE根本就没有针对于GPIO的接口。如果你想采用标准流驱动的GPIO口,很大的可能必须你自己丰衣足食,运气好一点的,或许你所使用的BSP就附带有其相应驱动。而对于TCC7901而言,很遗憾,属于前者。

 

    不过幸运的是,TCC7901对于寄存器的操作还算方便,所以写起驱动来,也并不是一件困难的事情。

 

    既然不困难,那么我们就自己动手,将TCC7901的驱动来完善吧!

 

    这篇文章假设朋友们已经对WinCE的流驱动结构有一定的了解,所以在此不对驱动的结构来进行解说,而是直奔主题。

 

    因为对于TCC7901的GPIO驱动来说,主要功能无非是设置或获取工作方式以及相应的数据,故我们对于控制码的定义可以定义为如下五种:

 


 控制码有了,那么我们的控制函数就可以简单的如此:

 

 

    该函数用到了一些常量,其实和控制码一样,也是枚举类型:

 

 

    我们先回头,看看IOControl的所调用的GPIO_SetFuncGPIO函数:

 

    不知道大家看了,是不是觉得有点恐怖,一大版的case。但其实这也没办法,因为这些GPIO口的功能设置,每个之间基本上不存在相似性,所以只能通过case这种土办法。

 

  虽然在这函数中,我们看到了函数的调用,但其实际上却是一堆宏定义而已:
 


  这些宏定义实际上都只是针对于TCC7901寄存器的操作,这里不再对寄存器操作的原理做叙述,有兴趣的朋友可以查看我的另一篇文章:《应用程序中读写TCC7901的寄存器》(http://blog.csdn.net/norains/archive/2010/07/12/5729377.aspx
  
  对于别的所调用的函数,代码也并不复杂:
 


  既然是驱动,那肯定是少不了注册表了:
  [HKEY_LOCAL_MACHINE/Drivers/Builtin/Pio]
      "Prefix"="PIO"
      "Dll"="gpio.dll"
      "Order"=dword:0
      "Index"=dword:1
  
  
  当我们编译好系统,将GPIO的驱动正确加载之后,我们就可以非常简单地通过CreateFile来对GPIO进行相应的操作啦!

posted @ 2010-07-13 10:04  我的一天  阅读(408)  评论(0编辑  收藏  举报