//=====================================================================
//TITLE:
// TCC89x的GPIO使用解说
//AUTHOR:
// norains
//DATE:
// Friday 05-November-2010
//Environment:
// Windows CE 6.0
// Telechips TCC8900
//=====================================================================
当接触一款新的CPU之时,如果想了该这款CPU,那么最简单就是从GPIO开始。对于已经并不是新品的TCC89x系列来说,自然也是如此。那么,现在我们就开始,看看如何操作这个GPIO吧。
Telechips为了简化代码,特意定义了一个GPIO的结构体,其定义如下:
大家都知道,寄存器是32bit,而结构体的每一项恰好也是声明为32bit,这样的好处就是,如果结构体的指针指向GPIO寄存器的初始地址,那么结构体的成员就能够和寄存器一一对应。
现在的问题就是,我们该如何获取GPIO寄存器的初始地址?查看DataSheet,如图:
可以得知GPIO寄存器的初始地址为0xF0102000。但这个地址我们不能直接使用,比如下面这句代码就会出错:
那么,我们该如何获取这寄存器的地址呢?这时候,就需要借助于Telechips的BSP下面的tcc_allocbaseaddress函数了。该函数传入GPIO的硬件地址,然后返回一个当前进程可使用的已经印射好的虚拟内存地址。使用方式很简单,如:
不过这里需要注意的是,tcc_allocbaseaddress只能在驱动函数中使用。如果你不幸地放在了应用程序,那么等待你的依然会是个错误。那么对于应用程序而言,是不是就束手无措,无法操作GPIO了呢?非也,Telechips其实也考虑到了这点。只不过,这时候需要借助于KernelIoControl函数,代码如下所示:
初始地址获取完毕之后,我们就可以对成员变量进行操作了。