GPIO¶
功能介绍¶
通用I/O 接口支持超40个可编程的输入/输出管脚,每个GPIO 端口都有相应的控制寄存器和配置寄存器,以满足不同应用的要求,共分为6组,每组最多可控制8个。
- 可编程控制的GPIO中断
- 中断屏蔽控制
- 上升沿、下降沿或双边沿触发
- 高电平或低电平触发
- 每个GPIO 管脚都可由软件单独配置为输入或输出
- 可单独打开/关闭每个GPIO管脚
GPIO是作为第一功能与其他功能复用,具体复用关系见系统控制单元SCU文档中的表6☞请点击这里查看和表7☞请点击这里查看。复用关系由系统控制单元的寄存器IO_REUSE_CFG配置。
每一组管脚功能使用时需要配置对应的IO_REUSE_CFG寄存器位,如将UART0_TX pad配置成UART0功能,则需要将寄存器IO_REUSE_CFG0的第0位和第1位配置为0x1;如将这个引脚配置为GPIO功能,则将寄存器IO_REUSE_CFG0的第0位和第1位配置为0x0。模拟管脚需要根据复用情况先选择该管脚是作为模拟管脚使用,还是数字管脚使用。
寄存器映射¶
GPIO0 / 1 / 2 / 3 / 4 / 5寄存器映射基地址为0x40040000、0x40041000、0x40042000、0x40043000、0x40044000、0x4003E000,每组寄存器详见表16。
偏移量 | 名称 | 位宽 | 类型 | 复位值 | 描述 |
---|---|---|---|---|---|
0x000~0x3FC | GPIODATA | 8 | R/W | 0x00000000 | 数据寄存器 |
0x400 | GPIODIR | 8 | R/W | 0x00000000 | 数据方向寄存器 |
0x404 | GPIOIS | 8 | R/W | 0x00000000 | 中断源(电平/边沿)寄存器 |
0x408 | GPIOIBE | 8 | R/W | 0x00000000 | 中断源双沿触发寄存器 |
0x40C | GPIOIEV | 8 | R/W | 0x00000000 | 中断事件寄存器 |
0x410 | GPIOIE | 8 | R/W | 0x00000000 | 中断屏蔽寄存器 |
0x414 | GPIORIS | 8 | R | 0x00000000 | 中断原始状态寄存器 |
0x418 | GPIOMIS | 8 | R | 0x00000000 | 中断屏蔽状态寄存器 |
0x41C | GPIOIC | 8 | W | 0x00000000 | 中断清除寄存器 |
0x424 | GPIOEN | 8 | R/W | 0x00000000 | 使能寄存器 |
数据寄存器(GPIODATA)¶
偏移量:0x000 ~ 0x3FC
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIODATA | 0x00 | R/W | GPIO数据寄存器。 GPIO配置为输入时,读此寄存器中数据。 GPIO配置为输出时,写数据到此寄存器。 |
注意本寄存器和地址偏移量配合使用,可以用一个寄存器对GPIO的8位数据,进行有效性区分和具体数据的操作。操作方式为:本寄存器的地址偏移量是地址位[11:0],其中[9:2]为有效位,若地址[9:2]内某bit为高(设该bit位为第X位),则对应的寄存器数据为[7:0]的对应该位(第X-2位)为有效,若地址[9:2]内某bit为低,则对应的寄存器数据为[7:0]的对应该位为无效,读写操作都不会影响该位。
举例:如果要对某GPIO口写一个0xFF字节数据,在该GPIO口已配置为输出时,则本寄存器的地址偏移量应设置为0x3FC,即将地址[9:2]内所有bit设为高,GPIO的全部数据位[7:0]才有效;如果只是需要对GPIO的第0位写1,则地址偏移量应设置为0x004,此时对本寄存器不管写0x01,还是0xFF,都只会对GPIO的第0位写1,其余位不会变化。读的时候操作也相同。
数据方向寄存器(GPIODIR)¶
偏移量:0x400
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIODIR | 0x00 | R/W | GPIO数据方向寄存器。 0:输入 1:输出 |
中断源寄存器(GPIOIS)¶
偏移量:0x404
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIOIS | 0x00 | R/W | GPIO中断源寄存器。 0:边沿 1:电平 |
中断源双沿触发寄存器(GPIOIBE)¶
偏移量:0x408
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIOIBE | 0x00 | R/W | GPIO中断源双沿寄存器。 0:中断触发事件由GPIOIEV控制 1:为双沿触发(GPIOIS配置为0) |
中断事件寄存器(GPIOIEV)¶
偏移量:0x40C
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIOIEV | 0x00 | R/W | GPIO中断事件寄存器。 0:下降沿或低电平 1:上升沿或高电平 |
中断屏蔽寄存器(GPIOIE)¶
偏移量:0x410
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIOIE | 0x00 | R/W | GPIO中断屏蔽寄存器。 0:屏蔽中断 1:不屏蔽中断 |
中断原始状态寄存器(GPIORIS)¶
偏移量:0x414
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R | 保留 |
7:0 | GPIORIS | 0x00 | R | GPIO中断原始状态寄存器。反映了屏蔽之前的中断状态。 |
中断屏蔽状态寄存器(GPIOMIS)¶
偏移量:0x418
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R | 保留 |
7:0 | GPIOMIS | 0x00 | R | GPIO中断屏蔽状态寄存器。反映了屏蔽之后的中断状态。 |
中断清除寄存器(GPIOIC)¶
偏移量:0x41C
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | W | 保留 |
7:0 | GPIOIC | 0x00 | W | GPIO中断清除寄存器。 1:清除相应中断状态 0:不影响 |
使能寄存器(GPIOEN)¶
偏移量:0x424
复位值:0x00000000
位域 | 名称 | 复位值 | 类型 | 描述 |
---|---|---|---|---|
31:8 | Reserved | 0x00000000 | R/W | 保留 |
7:0 | GPIOEN | 0x00 | R/W | GPIO使能寄存器。 0:禁止 1:使能 |