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