参数配置
30 Oct 2024
Read time: 2 minute(s)
因为 GPIO 是每个系统的必需模块,GPIO 驱动默认会被编译进系统,所以不需要在 scons --menuconfig
菜单中进行使能。
GPIO IRQ 驱动配置
GPIO 中断注册的功能可以单独使能
在 Luban-Lite 根目录下执行
scons --menuconfig
,进入 menuconfig
的功能配置界面,按如下选择:Drivers options --->
[*] support gpio irq register
目标板 PinMux 配置
具体的配置路径于 luban-lite\target\$chip\$board\pinmux.c
Luban-Lite 中会把当前单板的所有 PinMux
配置进行集中配置,例如:
struct aic_pinmux aic_pinmux_config[] = {
#ifdef AIC_USING_UART0
/* uart0 */
{5, PIN_PULL_DIS, 3, "PA.0"},
{5, PIN_PULL_DIS, 3, "PA.1"},
#endif
#ifdef AIC_USING_I2C3
{1, PIN_PULL_DIS, 3, "PA.8"}, // RST
{1, PIN_PULL_DIS, 3, "PA.9"}, // INT
{4, PIN_PULL_DIS, 3, "PA.10"}, // SCK
{4, PIN_PULL_DIS, 3, "PA.11"}, // SDA
#endif
};
void aic_board_pinmux_init(void)
{
uint32_t i = 0;
long pin = 0;
unsigned int g;
unsigned int p;
// 统一配置 pin 脚的 function mode/pull bias/drive strength
for (i=0; i<ARRAY_SIZE(aic_pinmux_config); i++) {
pin = hal_gpio_name2pin(aic_pinmux_config[i].name);
if (pin < 0)
continue;
g = GPIO_GROUP(pin);
p = GPIO_GROUP_PIN(pin);
hal_gpio_set_func(g, p, aic_pinmux_config[i].func);
hal_gpio_set_bias_pull(g, p, aic_pinmux_config[i].bias);
hal_gpio_set_drive_strength(g, p, aic_pinmux_config[i].drive);
}
}
GPIO 管脚配置
某些驱动模块需要用到通用 GPIO 管脚,并且不同单板下的管脚还不同。这种情况的配置分为两步:
-
首先在
scons --menuconfig
模块驱动的配置中,配置 GPIO 名称。例如:Board options ---> [*] Using Gmac0 gmac0 parameter ---> (PE.6) gmac0 phy reset gpio // 配置 GPIO 名称,字符串要遵循实例格式
-
在驱动模块初始化时,通过解析字符串得到正确的 GPIO pin 编号,并进行配置。例如:
pin = hal_gpio_name2pin(AIC_DEV_GMAC0_PHYRST_GPIO); // 根据 gpio 名称,转换成 gpio id 编号 g = GPIO_GROUP(pin); p = GPIO_GROUP_PIN(pin); hal_gpio_direction_output(g, p); // 配置 gpio 为输出模式 hal_gpio_clr_output(g, p); // 设置 gpio 输出电平 aicos_mdelay(50); hal_gpio_set_output(g, p); aicos_mdelay(50);