GPIO 调试指南
X5 芯片共有 308 个 IO 功能管脚,其中 129 个管脚都可以配置工作在 gpio 模式下,但是需要注意和其他功能管脚的复用关系。
管脚查询
IO 管脚的复用和配置,以及上电默认状态、复用、驱动能力、上下拉、施密特触发配置和对应管脚的 gpio 寄存器信息可以在 datasheets 查阅《X5 PIN SW Reg-V1.1.xlsx》(以下统称为“表格”)。
示例
以查询LSIO_UART3_RXD号管脚的复用、方向控制、数据寄存器地址为例进行说明:
功能复用寄存器说明:
-
打开表格,选择
PIN Mux List的数据表。 -
第 B 列是 PinName,找到
LSIO_UART3_RXD所在的行,第 F 列表示默认 function,为LSIO_GPIO0_PIN10,即功能为 GPIO,GPIO 名为LSIO_GPIO0_PIN10。第 I, K, M, O 列表示每种 function 对应的功能,如下图所示:
-
配置 PIN 功能:选择
LSIO PIN Control Register数据表,如下图所示:
- 数据表的第一行记录了寄存器的基地址,也就是
0x34180000; - 数据表的第 A 列记录了各个寄存器的偏移;
- 数据表的第 G 列描述了寄存器的功能;
- 在数据表 G 列找到“
lsio_uart3_rxd PIN mux selector”所在的行,可以看到LSIO_UART3_RXD的PIN mux寄存器偏移为0x84,完整地址可由基地址 + 偏移得到:0x34180000 + 0x84 = 0x34180084; - 找到以上配置项后,就可以设置对应 PIN 的 function,Function[x]代表了如果想要配置为该功能,需要在寄存器内的对应偏移写入对应的[x]。例如在寄存器
0x34180084的bit20-21置为0x0,表示LSIO_UART3_RXD引脚被配置为uart3 rx功能,也就是Function 0;配置为0x1,表示LSIO_UART3_RXD引脚被配置为i2c5 scl功能,也就是Function 1;配置为0x2,表示LSIO_UART3_RXD引脚被配置为GPIO功能,也就是Function 2;
- 数据表的第一行记录了寄存器的基地址,也就是
-
配置 PIN 属性:选择
LSIO PIN Control Register数据表,如下图所示:
- 数据表的第一行记录了寄存器的基地址,也就是
0x34180000; - 数据表的第 A 列记录了各个寄存器的偏移;
- 数据表的第 G 列描述了寄存器的功能;
- 在数据表 G 列找到“
lsio_uart3_rxd pull up enable”所在的行,可以看到LSIO_UART3_RXD的 PU/PD/施密特开关/PIN 驱动力的寄存器偏移为0x3C,完整地址可由基地址 + 偏移得到:0x34180000 + 0x3C = 0x3418003C; - PIN 的驱动力具体数值请参考
Description for GPlO App.数据表的驱动力表格; - PIN 的电源域请搜索
mode select并在 G 列确认当前寄存器控制的 PIN 包含了LSIO_UART3_RXD,可以看到控制 PIN 电源域的寄存器偏移为0x38,完整地址可由基地址 + 偏移得到:0x34180000 + 0x38 = 0x34180038如下图所示:
- 数据表的第一行记录了寄存器的基地址,也就是
-
配置寄存器时,建议先把该值先读出来,然后只修改所需寄存器比特后再写回。
GPIO 控制和数据寄存器:
-
在表格的
DW_apb_gpio8_mem_map_v1.0和DW_apb_gpio32_mem_map_v1.0数据表,描述了引脚对应的 GPIO 方向寄存器和数值寄存器,如下图(DW_apb_gpio32_mem_map_v1.0)所示:
-
例如引脚
LSIO_UART3_RXD对应的 GPIO 为LSIO_GPIO0_PIN10,如上图所示,LSIO_GPIO0的控制器的基地址为0x34120000,那么数值寄存器地址就是0x34120000,方向寄存器地址就是0x34120004。LSIO_UART3_RXD引脚在这两个寄存器中对应的 bit 偏移为 GPIO 的序号。引脚LSIO_UART3_RXD所对应的 GPIO 为LSIO_GPIO0_PIN10,那么 bit 偏移就是 10。
驱动代码
kernel/drivers/gpio/gpio-dwapb.c # gpio驱动源文件
内核配置
GPIO_DWAPB
