跳转至

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。

表16 GPIO寄存器映射

偏移量 名称 位宽 类型 复位值 描述
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:使能