`
java-mans
  • 浏览: 11422407 次
文章分类
社区版块
存档分类
最新评论

自己动手写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进行相应的操作啦!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics