详解TCC89x的GPIO寄存器

时间:2021-09-18 17:52:47

//=====================================================================
//TITLE:
//    详解TCC89x的GPIO寄存器
//AUTHOR:
//    norains
//DATE:
//    Tuesday  09-November-2010
//Environment:
//    Windows CE 6.0
//    Telechips TCC8900
//=====================================================================

 

     在我的另一篇文章《TCC89x的GPIO使用解说》(http://blog.csdn.net/norains/archive/2010/11/09/5997230.aspx)已经对GPIO的使用做了一定的说明,但没有具体涉及到寄存器,所以本文就针对寄存器来做一些说明。

 

1. GPIO Data Register

 详解TCC89x的GPIO寄存器
     数据寄存器,在这里可以读取到当前PIN的值。比如,GPIO_A00为输入模式的话,并且外部输入为高,那么我们读取GPADAT的Bit0,就是为1。如果为输出模式的话,在这里设置相应位的数值,也会表现到PIN外部。不过,并不建议直接在这里更改相应的数值,因为如果我们需要更改相应的bit,需要将整个寄存器读取,然后设置相应位之后再回写,远不如后面将要提到的寄存器效率更高。

 


2. GPIO Direction Control Register
 详解TCC89x的GPIO寄存器
     方向寄存器,当相应的bit为1时,对应的pin为输出状态;如果为0,则是输入。

 


3. GPIO Set Register
 详解TCC89x的GPIO寄存器
     置“1”寄存器,当在这里设置为“1”时,对应的数据寄存器的位也为“1”。换句话来说,关系为:GPxDAT = GPxDAT | GPxSET。在这个关系式中还能得知,只有“1”有效,如果往GPxSET写“0”,那么对应的GPxDAT的相应位并不会置“0”。

 


4. GPIO Clear Register
 详解TCC89x的GPIO寄存器
     清“0”寄存器,也是写“1”有效,关系式为:GPxDAT = GPxDAT & ~GPxCLR。当在GPxCLR的某个位写“1”,那么对应的GPxDAT的相应位则变成“0”。


5. GPIO XOR Register

详解TCC89x的GPIO寄存器
 
     异或寄存器,关系式为:GPADAT = GPADAT ^ GPXOR。说实话,如果是用C/C++的话,该位使用的不多;但如果是汇编,使用频率就比较频繁了。

 


6. Driver Strength Control Register
 详解TCC89x的GPIO寄存器
     驱动能力寄存器,可选数值为0~3,其中3为最高的驱动能力。

 


7.  Pull UP/DOWN Control Register
 详解TCC89x的GPIO寄存器
     上拉/下拉寄存器。比如PIN1,对应的位是PU1和PD1。如果要上拉,则PU1=1,PD1=0;下拉则是PU1=0,PD1=1;悬空则是PU1=0,PD1=0;但千万不能同时上拉或下拉,也就是不能同时PU1=1,PD1=1。

 


8. Port Configuration Register
 详解TCC89x的GPIO寄存器
     功能寄存器,当每4Bit为0时,则对应的PIN的功能为GPIO,否则为别的特殊功能。