//=====================================================================
//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
数据寄存器,在这里可以读取到当前PIN的值。比如,GPIO_A00为输入模式的话,并且外部输入为高,那么我们读取GPADAT的Bit0,就是为1。如果为输出模式的话,在这里设置相应位的数值,也会表现到PIN外部。不过,并不建议直接在这里更改相应的数值,因为如果我们需要更改相应的bit,需要将整个寄存器读取,然后设置相应位之后再回写,远不如后面将要提到的寄存器效率更高。
2. GPIO Direction Control Register
方向寄存器,当相应的bit为1时,对应的pin为输出状态;如果为0,则是输入。
3. GPIO Set Register
置“1”寄存器,当在这里设置为“1”时,对应的数据寄存器的位也为“1”。换句话来说,关系为:GPxDAT = GPxDAT | GPxSET。在这个关系式中还能得知,只有“1”有效,如果往GPxSET写“0”,那么对应的GPxDAT的相应位并不会置“0”。
4. GPIO Clear Register
清“0”寄存器,也是写“1”有效,关系式为:GPxDAT = GPxDAT & ~GPxCLR。当在GPxCLR的某个位写“1”,那么对应的GPxDAT的相应位则变成“0”。
5. GPIO XOR Register
异或寄存器,关系式为:GPADAT = GPADAT ^ GPXOR。说实话,如果是用C/C++的话,该位使用的不多;但如果是汇编,使用频率就比较频繁了。
6. Driver Strength Control Register
驱动能力寄存器,可选数值为0~3,其中3为最高的驱动能力。
7. Pull UP/DOWN Control Register
上拉/下拉寄存器。比如PIN1,对应的位是PU1和PD1。如果要上拉,则PU1=1,PD1=0;下拉则是PU1=0,PD1=1;悬空则是PU1=0,PD1=0;但千万不能同时上拉或下拉,也就是不能同时PU1=1,PD1=1。
8. Port Configuration Register
功能寄存器,当每4Bit为0时,则对应的PIN的功能为GPIO,否则为别的特殊功能。