简介
在 Luban-Lite SDK 中,相同板卡的多个配置,使用同一个 pinmux.c 配置 GPIO 引脚功能。
例如 D133CBS RISC-V Kunlun Pi 开发板
d13x_kunlunpi88-nor_baremetal_bootloader_defconfig
d13x_kunlunpi88-nor_rt-thread_helloworld_defconfig
使用 target/d13x/kunlunpi88-nor/pinmux.c
配置 GPIO 引脚功能
!注解
每一个需要使用到的引脚都应显式地设置为指定功能,包括通用 GPIO、I2C、UART、SPI 等功能。
pinmux.c
pinmux.c 文件路径在 target/<CPU>/<board>/pinmux.c
。
由于项目中的 BootLoader 和 RT-Thread 是共享 pinmux 配置的, 在修改 pinmux.c 之后,应该先编译 BootLoader, 再编译 RT-Thread,否则 pinmux 配置可能无法生效。
!注解
自 V1.0.4 之后,Luban-Lite 支持使用 mb 命令,一键编译 BootLoader 和 RT-Thread。
在 pinmux.c 中,通过结构体数组,对所有 pin 脚的功能进行管理,并在系统启动时统一做配置。
c
struct aic_pinmux aic_pinmux_config[] = {
...
};
1
2
3
2
3
配置
每个 pin 脚的配置,使用结构体描述。
c
struct aic_pinmux
{
unsigned char func; // 功能编号
unsigned char bias; // 内部上下拉设置,一般无需修改
unsigned char drive; // 驱动能力,若需要修改,请联系专业人士确认
char * name; // 引脚名称字符串,例如 "PA.0"
};
1
2
3
4
5
6
7
2
3
4
5
6
7
例如 PA.0 和 PA.1 引脚:
c
struct aic_pinmux aic_pinmux_config[] = {
#ifdef AIC_USING_UART0
/* uart0 */
{5, PIN_PULL_DIS, 3, "PA.0"}, // PA.0 配置功能5,用作串口0
{5, PIN_PULL_DIS, 3, "PA.1"}, // PA.1 配置功能5,用作串口0
#endif
...
};
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
!注解
若要配置某 pin 脚用于通用 GPIO 功能,则需将功能配置为1。 具体引脚功能可参考 “芯片手册” - “4.引脚复用” 功能表进行查询确认
!注意
pinmux.c 中,针对同一个 pin 脚只能配置一个功能。
检查工具
pinmux_check
为方便对引脚检查配置,Luban-Lite 提供 pinmux_check 工具,用于检查引脚配置。
配置
在 RT-Thread 配置中,进行如下配置:
Local packages options --->
ArtInChip packages options --->
[*] aic-pinmux-check --->
[*] Enable pinmux check tools
1
2
3
4
2
3
4
开启 pinmux_check 工具,编译,烧录。
使用
系统启动之后,输入 pinmux_check -h
命令,查看帮助菜单。
aic /> pinmux_check -h
Compile time: Apr 23 2024 15:39:22
Usage: pinmux_check [options]
-s, --start print PIN start from PXn . Default as start from PA0
-c, --count print PIN count.
-h, --help
Example:
pinmux_check -s PA0 -c 2
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
查看 PA0、PA1 的引脚配置。
aic /> pinmux_check -s PA0 -c 2
PA0: 0x00000035, fun[5], drv[3], pull[0], IE[0], OE[0], IE_FORCE[0] # fun[5] 表示PA0配置为功能5,drv[3]表示驱动能力为3;
PA1: 0x00000035, fun[5], drv[3], pull[0], IE[0], OE[0], IE_FORCE[0] # fun[5] 表示PA1配置为功能5,drv[3]表示驱动能力为3;
1
2
3
2
3