10. I/O端口

10. I/O端口

10.1 GPIO简介

CH559提供最多45个I/O引脚,部分引脚具有复用功能。其中,端口P0~P3的输入和输出以及P4的输出都可以按位寻址。

如果引脚没有被配置成复用功能,则默认是通用I/O引脚状态。作为通用数字I/O使用时,所有I/O端口都具有真正的“读–修改–写”功能,支持SETB或者CLR等位操作指令独立地改变某些引脚的方向或者端口电平等。

10.2 GPIO寄存器

本节所有的寄存器和位以通用格式表示:小写的“n”表示端口的序号(n=0、1、2、3),而小写的“x”代表位的序号(x=0、1、2、3、4、5、6、7)。

表10.2.1 GPIO寄存器列表

名称地址描述复位值
P080hP0端口输入输出寄存器FFh
P0_DIRC4hP0端口方向控制寄存器00h
P0_PUC5hP0端口上拉使能寄存器00h/FFh
P190hP1端口输入输出寄存器FFh
P1_IEB9hP1端口输入使能寄存器FFh
P1_DIRBAhP1端口方向控制寄存器00h
P1_PUBBhP1端口上拉使能寄存器FFh
P2A0hP2端口输入输出寄存器FFh
P2_DIRBChP2端口方向控制寄存器00h
P2_PUBDhP2端口上拉使能寄存器FFh
P3B0hP3端口输入输出寄存器FFh
P3_DIRBEhP3端口方向控制寄存器00h
P3_PUBFhP3端口上拉使能寄存器FFh
P4_OUTC0hP4端口输出寄存器00h
P4_INC1hP4端口输入寄存器(只读)FFh
P4_DIRC2hP4端口方向控制寄存器00h
P4_PUC3hP4端口上拉使能寄存器FFh
P4_CFGC7hP4端口配置寄存器00h
P5_INC7hP5端口输入寄存器(只读)00h
PIN_FUNCCEh引脚功能选择寄存器00h
PORT_CFGC6h端口配置寄存器0Fh
XBUS_SPEEDFDh总线速度配置寄存器FFh
XBUS_AUXA2h总线辅助设置寄存器00h

端口配置寄存器(PORT_CFG):

名称访问描述复位值
[7:4]bPn_DRVRWPn端口输出驱动能力选择,该位为0选择驱动电流5mA级别;该位为1对于P0/P2/P3选择驱动电流20mA级别,对于P1选择驱动电流10mA级别0000b
[3:0]bPn_OCRWPn端口开漏输出使能,该位为0设置端口为推挽输出;该位为1设置端口为开漏输出1111b

Pn端口输入输出寄存器(Pn):

名称访问描述复位值
[7:0]Pn.0~Pn.7RWPn.x引脚状态输入和数据输出位,可以按位寻址FFh

Pn端口方向控制寄存器(Pn_DIR):

名称访问描述复位值
[7:0]Pn_DIRRWPn.x引脚方向设置00h

P0端口上拉使能寄存器(P0_PU)和Pn端口上拉使能寄存器(Pn_PU),此处n=1/2/3:

名称访问描述复位值
[7:0]P0_PURWP0.x引脚上拉电阻使能(当配置En_P0_Pullup=0)00h
P0.x引脚上拉电阻使能(当配置En_P0_Pullup=1)FFh
[7:0]Pn_PURWPn.x引脚上拉电阻使能,该位为0禁止上拉;该位为1使能上拉FFh

由PORT_CFG中的位bPn_OC和端口方向控制寄存器Pn_DIR以及端口上拉使能寄存器Pn_PU组合实现Pn端口的相关配置,具体如下。

表10.2.2 端口配置寄存器组合

bPn_OCPn_DIRPn_PU工作模式描述
000高阻输入模式,引脚没有上拉电阻
001上拉输入模式,引脚有上拉电阻
01x推挽输出模式,具有对称驱动能力,可以输出或者吸收较大电流
100高阻输入弱准双向模式,开漏输出,引脚没有上拉电阻
110高阻输入准双向模式,开漏输出,引脚没有上拉电阻,当输出从低电平转高电平时自动驱动2个时钟周期的高电平以加速转换
101弱准双向模式(仿8051),开漏输出,支持输入,引脚有上拉电阻
111准双向模式(标准8051),开漏输出,支持输入,引脚有上拉电阻,当输出从低电平转高电平时自动驱动2个时钟周期的高电平以加速转换

P0~P3端口支持纯输入或推挽输出以及准双向等模式,P4端口支持纯输入或推挽输出等模式。各引脚都有可以自由控制的连接到VDD33的内部上拉电阻,以及都有连接到GND的保护二极管。

图10.2.1是P1端口的P1.x引脚的等效原理图,去掉P1_IE和AIN以及ADC_CHANN之后可以适用于P0、P2、P3端口。

图10.2.1I/O 引脚等效原理图

GPIO_schematic

P1端口输入使能寄存器(P1_IE):

名称访问描述复位值
[7:0]P1_IERWP1.x引脚输入使能,该位为0则引脚用于ADC模拟输入,禁止数字输入;该位为1则使能数字输入FFh

10.3 P4端口

P4端口输出寄存器(P4_OUT):

名称访问描述复位值
[7:0]P4_OUT.0~P4_OUT.7RWP4.x引脚数据输出位,可以按位寻址00h

P4端口输入寄存器(P4_IN):

名称访问描述复位值
[7:0]P4_INR0P4.x引脚状态输入位FFh

P4端口上拉使能寄存器(P4_PU):

名称访问描述复位值
[7:0]P4_PURWP4.x引脚上拉电阻使能,该位为0禁止上拉;该位为1使能上拉FFh

P4端口方向控制寄存器(P4_DIR):

名称访问描述复位值
[7:0]P4_DIRRWP4.x引脚方向设置,该位为0则用于输入;该位为1则用于输出00h

P4端口配置寄存器(P4_CFG)和P5端口输入寄存器(P5_IN):

名称访问描述复位值
7P5.7R0P5.7引脚状态输入位0
6bIO_INT_ACTR0GPIO中断请求激活状态:
当bIE_IO_EDGE=0时,该位为1表示GPIO输入有效电平,将请求中断,为0表示输入无效电平;
当bIE_IO_EDGE=1时,该位作为边沿中断标志,为1表示检测到有效边沿,该位无法软件清零,只能在复位时或电平中断模式下或进入相应的中断服务程序时被自动清零
0
5P5.5R0P5.5引脚状态输入位,内置有可控的下拉电阻0
4P5.4R0P5.4引脚状态输入位,内置有可控的下拉电阻0
3bSPI0_PIN_XRWSPI0引脚SCS/SCK映射使能,该位为0则使用P1.4/P1.7;该位为1则使用P4.6/P4.70
2bP4_DRVRWP4端口输出驱动能力选择,该位为0选择驱动电流5mA级别;该位为1选择驱动电流20mA级别0
1P5.1R0P5.1引脚状态输入位,内置有可控的下拉电阻0
0P5.0R0P5.0引脚状态输入位,内置有可控的下拉电阻0

10.4 GPIO复用与映射

CH559部分I/O引脚具有复用功能,上电后默认均为通用I/O引脚,使能不同功能模块后,相应引脚被配置成各自功能模块对应的功能引脚。

引脚功能选择寄存器(PIN_FUNC):

名称访问描述复位值
7bPWM1_PIN_XRWPWM1/PWM2引脚映射使能位,该位为0则PWM1/2利用P2.4/P2.5;该位为1则PWM1/2使用P4.3/P4.50
6bTMR3_PIN_XRWPWM3/CAP3引脚映射使能位,该位为0则PWM3/CAP3使用P1.2;该位为1则PWM3/CAP3使用P4.20
5bT2EX_PIN_XRWT2EX/CAP2引脚映射使能位,该位为0则T2EX/CAP2使用P1.1;该位为1则T2EX/CAP2使用P2.50
4bUART0_PIN_XRWUART0引脚映射使能位,该位为0则RXD0/TXD0使用P3.0/P3.1;该位为1则RXD0/TXD0使用P0.2/P0.30
3bXBUS_ENRWxBUS外部总线功能使能位,该位为0关闭外部总线;该位为1使能P0端口作为8位数据总线,以及P3.6/P3.7作为总线访问期间的写/读选通控制0
2bXBUS_CS_OERWxBUS外部总线片选输出使能位,该位为0禁止输出片选,可由外部电路自行译码;该位为1则P3.4作为CS0输出(XCS0片选0,低电平有效),以及在ALE禁用的情况下将总线地址A15取反后输出到P3.3(相当于片选1,低电平有效)0
1bXBUS_AH_OERWxBUS外部总线高8位地址输出使能位,该位为0禁止输出;该位为1则在MOVX_@DPTR指令访问外部总线期间,P2端口输出总线地址高8位0
0bXBUS_AL_OERWxBUS外部总线低8位地址输出使能位,该位为0则是复用地址模式,在访问外部总线时根据需要将地址低8位与数据总线复用输出,由ALE控制外部电路锁存;该位为1则是直接地址模式,通过P4.0~P4.5和P3.5以及P2.7输出低8位地址A0~A70

表10.4.1 GPIO引脚复用功能列表

GPIO其它功能:按从左到右的优先顺序
P0[0] AD0, UDTR/bUDTR, P0.0
P0[1] AD1, URTS/bURTS, P0.1
P0[2] AD2, RXD_/bRXD_, P0.2
P0[3] AD3, TXD_/bTXD_, P0.3
P0[4] AD4, UCTS/bUCTS, P0.4
P0[5] AD5, UDSR/bUDSR, P0.5
P0[6] AD6, URI/bURI, P0.6
P0[7] AD7, UDCD/bUDCD, P0.7
P1[0] AIN0, T2/bT2, CAP1/bCAP1, P1.0
P1[1] AIN1, T2EX/bT2EX, CAP2/bCAP2, P1.1
P1[2] AIN2, PWM3/bPWM3, CAP3/bCAP3, P1.2
P1[3] AIN3, P1.3
P1[4] AIN4, SCS/bSCS, P1.4
P1[5] AIN5, MOSI/bMOSI, P1.5
P1[6] AIN6, MISO/bMISO, P1.6
P1[7] AIN7, SCK/bSCK, P1.7
P2[0] A8, P2.0
P2[1] MOSI1/bMOSI1, A9, P2.1
P2[2] MISO1/bMISO1, A10, P2.2
P2[3] SCK1/bSCK1, A11, P2.3
P2[4] PWM1/bPWM1, A12, P2.4
P2[5] TNOW/bTNOW, PWM2/bPWM2, A13, T2EX_/bT2EX_, CAP2_/bCAP2_, P2.5
P2[6] RXD1/bRXD1, A14, P2.6
P2[7] TXD1/bTXD1, DA7/bDA7, A15, P2.7
P3[0] RXD/bRXD, P3.0
P3[1] TXD/bTXD, P3.1
P3[2] LED0/bLED0, INT0/bINT0, P3.2
P3[3] LED1/bLED1, !A15, INT1/bINT1, P3.3
P3[4] LEDC/bLEDC, XCS0/bXCS0, T0/bT0, P3.4
P3[5] DA6/bDA6, T1/bT1, P3.5
P3[6] WR/bWR, P3.6
P3[7] RD/bRD, P3.7
P4[0] LED2/bLED2, A0, RXD1_/bRXD1_, P4.0
P4[1] A1, P4.1
P4[2] PWM3_/bPWM3_, CAP3_/bCAP3_, A2, P4.2
P4[3] PWM1_/bPWM1_, A3, P4.3
P4[4] LED3/bLED3, TNOW_/bTNOW_, TXD1_/bTXD1_, A4, P4.4
P4[5] PWM2_/bPWM2_, A5, P4.5
P4[6] XI, SCS_/bSCS_, P4.6
P4[7] XO, SCK_/bSCK_, P4.7
P5[0] DM/bDM, P5.0
P5[1] DP/bDP, P5.1
P5[4] HM/bHM, ALE, XB, P5.4
P5[5] HP/bHP, !A15, XA, P5.5
P5[7] RST/bRST, P5.7

上表中所述按从左到右的优先顺序,是指多个功能模块竞争使用该GPIO时的优先顺序。例如,P2端口已被设置为输出总线地址高8位,如果实际只用到A8~A11地址,那么P2.4/P2.5仍可用于更高优先级的PWM1/PWM2等功能,P2.6仍可用于RXD1功能,P2.7仍可用于更高优先级的TXD1或者DA7等功能,从而避免在未用到A12~A15地址时浪费P2.4~P2.7引脚。