TCC89x的GPIO使用解说

//=====================================================================
//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函数,代码如下所示:

 

 
     初始地址获取完毕之后,我们就可以对成员变量进行操作了。

 

posted @ 2010-11-09 12:35  我的一天  阅读(292)  评论(0编辑  收藏  举报