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寄存器列表
名称 | 地址 | 描述 | 复位值 |
---|---|---|---|
P0 | 80h | P0端口输入输出寄存器 | FFh |
P0_DIR | C4h | P0端口方向控制寄存器 | 00h |
P0_PU | C5h | P0端口上拉使能寄存器 | 00h/FFh |
P1 | 90h | P1端口输入输出寄存器 | FFh |
P1_IE | B9h | P1端口输入使能寄存器 | FFh |
P1_DIR | BAh | P1端口方向控制寄存器 | 00h |
P1_PU | BBh | P1端口上拉使能寄存器 | FFh |
P2 | A0h | P2端口输入输出寄存器 | FFh |
P2_DIR | BCh | P2端口方向控制寄存器 | 00h |
P2_PU | BDh | P2端口上拉使能寄存器 | FFh |
P3 | B0h | P3端口输入输出寄存器 | FFh |
P3_DIR | BEh | P3端口方向控制寄存器 | 00h |
P3_PU | BFh | P3端口上拉使能寄存器 | FFh |
P4_OUT | C0h | P4端口输出寄存器 | 00h |
P4_IN | C1h | P4端口输入寄存器(只读) | FFh |
P4_DIR | C2h | P4端口方向控制寄存器 | 00h |
P4_PU | C3h | P4端口上拉使能寄存器 | FFh |
P4_CFG | C7h | P4端口配置寄存器 | 00h |
P5_IN | C7h | P5端口输入寄存器(只读) | 00h |
PIN_FUNC | CEh | 引脚功能选择寄存器 | 00h |
PORT_CFG | C6h | 端口配置寄存器 | 0Fh |
XBUS_SPEED | FDh | 总线速度配置寄存器 | FFh |
XBUS_AUX | A2h | 总线辅助设置寄存器 | 00h |
端口配置寄存器(PORT_CFG):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:4] | bPn_DRV | RW | Pn端口输出驱动能力选择,该位为0选择驱动电流5mA级别;该位为1对于P0/P2/P3选择驱动电流20mA级别,对于P1选择驱动电流10mA级别 | 0000b |
[3:0] | bPn_OC | RW | Pn端口开漏输出使能,该位为0设置端口为推挽输出;该位为1设置端口为开漏输出 | 1111b |
Pn端口输入输出寄存器(Pn):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | Pn.0~Pn.7 | RW | Pn.x引脚状态输入和数据输出位,可以按位寻址 | FFh |
Pn端口方向控制寄存器(Pn_DIR):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | Pn_DIR | RW | Pn.x引脚方向设置 | 00h |
P0端口上拉使能寄存器(P0_PU)和Pn端口上拉使能寄存器(Pn_PU),此处n=1/2/3:
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P0_PU | RW | P0.x引脚上拉电阻使能(当配置En_P0_Pullup=0) | 00h | P0.x引脚上拉电阻使能(当配置En_P0_Pullup=1) | FFh |
[7:0] | Pn_PU | RW | Pn.x引脚上拉电阻使能,该位为0禁止上拉;该位为1使能上拉 | FFh |
由PORT_CFG中的位bPn_OC和端口方向控制寄存器Pn_DIR以及端口上拉使能寄存器Pn_PU组合实现Pn端口的相关配置,具体如下。
表10.2.2 端口配置寄存器组合
bPn_OC | Pn_DIR | Pn_PU | 工作模式描述 |
---|---|---|---|
0 | 0 | 0 | 高阻输入模式,引脚没有上拉电阻 |
0 | 0 | 1 | 上拉输入模式,引脚有上拉电阻 |
0 | 1 | x | 推挽输出模式,具有对称驱动能力,可以输出或者吸收较大电流 |
1 | 0 | 0 | 高阻输入弱准双向模式,开漏输出,引脚没有上拉电阻 |
1 | 1 | 0 | 高阻输入准双向模式,开漏输出,引脚没有上拉电阻,当输出从低电平转高电平时自动驱动2个时钟周期的高电平以加速转换 |
1 | 0 | 1 | 弱准双向模式(仿8051),开漏输出,支持输入,引脚有上拉电阻 |
1 | 1 | 1 | 准双向模式(标准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 引脚等效原理图
P1端口输入使能寄存器(P1_IE):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P1_IE | RW | P1.x引脚输入使能,该位为0则引脚用于ADC模拟输入,禁止数字输入;该位为1则使能数字输入 | FFh |
10.3 P4端口
P4端口输出寄存器(P4_OUT):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P4_OUT.0~P4_OUT.7 | RW | P4.x引脚数据输出位,可以按位寻址 | 00h |
P4端口输入寄存器(P4_IN):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P4_IN | R0 | P4.x引脚状态输入位 | FFh |
P4端口上拉使能寄存器(P4_PU):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P4_PU | RW | P4.x引脚上拉电阻使能,该位为0禁止上拉;该位为1使能上拉 | FFh |
P4端口方向控制寄存器(P4_DIR):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
[7:0] | P4_DIR | RW | P4.x引脚方向设置,该位为0则用于输入;该位为1则用于输出 | 00h |
P4端口配置寄存器(P4_CFG)和P5端口输入寄存器(P5_IN):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
7 | P5.7 | R0 | P5.7引脚状态输入位 | 0 |
6 | bIO_INT_ACT | R0 | GPIO中断请求激活状态: 当bIE_IO_EDGE=0时,该位为1表示GPIO输入有效电平,将请求中断,为0表示输入无效电平; 当bIE_IO_EDGE=1时,该位作为边沿中断标志,为1表示检测到有效边沿,该位无法软件清零,只能在复位时或电平中断模式下或进入相应的中断服务程序时被自动清零 | 0 |
5 | P5.5 | R0 | P5.5引脚状态输入位,内置有可控的下拉电阻 | 0 |
4 | P5.4 | R0 | P5.4引脚状态输入位,内置有可控的下拉电阻 | 0 |
3 | bSPI0_PIN_X | RW | SPI0引脚SCS/SCK映射使能,该位为0则使用P1.4/P1.7;该位为1则使用P4.6/P4.7 | 0 |
2 | bP4_DRV | RW | P4端口输出驱动能力选择,该位为0选择驱动电流5mA级别;该位为1选择驱动电流20mA级别 | 0 |
1 | P5.1 | R0 | P5.1引脚状态输入位,内置有可控的下拉电阻 | 0 |
0 | P5.0 | R0 | P5.0引脚状态输入位,内置有可控的下拉电阻 | 0 |
10.4 GPIO复用与映射
CH559部分I/O引脚具有复用功能,上电后默认均为通用I/O引脚,使能不同功能模块后,相应引脚被配置成各自功能模块对应的功能引脚。
引脚功能选择寄存器(PIN_FUNC):
位 | 名称 | 访问 | 描述 | 复位值 |
---|---|---|---|---|
7 | bPWM1_PIN_X | RW | PWM1/PWM2引脚映射使能位,该位为0则PWM1/2利用P2.4/P2.5;该位为1则PWM1/2使用P4.3/P4.5 | 0 |
6 | bTMR3_PIN_X | RW | PWM3/CAP3引脚映射使能位,该位为0则PWM3/CAP3使用P1.2;该位为1则PWM3/CAP3使用P4.2 | 0 |
5 | bT2EX_PIN_X | RW | T2EX/CAP2引脚映射使能位,该位为0则T2EX/CAP2使用P1.1;该位为1则T2EX/CAP2使用P2.5 | 0 |
4 | bUART0_PIN_X | RW | UART0引脚映射使能位,该位为0则RXD0/TXD0使用P3.0/P3.1;该位为1则RXD0/TXD0使用P0.2/P0.3 | 0 |
3 | bXBUS_EN | RW | xBUS外部总线功能使能位,该位为0关闭外部总线;该位为1使能P0端口作为8位数据总线,以及P3.6/P3.7作为总线访问期间的写/读选通控制 | 0 |
2 | bXBUS_CS_OE | RW | xBUS外部总线片选输出使能位,该位为0禁止输出片选,可由外部电路自行译码;该位为1则P3.4作为CS0输出(XCS0片选0,低电平有效),以及在ALE禁用的情况下将总线地址A15取反后输出到P3.3(相当于片选1,低电平有效) | 0 |
1 | bXBUS_AH_OE | RW | xBUS外部总线高8位地址输出使能位,该位为0禁止输出;该位为1则在MOVX_@DPTR指令访问外部总线期间,P2端口输出总线地址高8位 | 0 |
0 | bXBUS_AL_OE | RW | xBUS外部总线低8位地址输出使能位,该位为0则是复用地址模式,在访问外部总线时根据需要将地址低8位与数据总线复用输出,由ALE控制外部电路锁存;该位为1则是直接地址模式,通过P4.0~P4.5和P3.5以及P2.7输出低8位地址A0~A7 | 0 |
表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引脚。