问题
本人在项目中需要通过GPIO来控制继电器的通断。当设备上电时,需要保证该GPIO为低电平,一直等到整个系统启动, 应用程序正常运行后,才能设置该GPIO为高电平。
首先在u-boot中很容易设置GPIO为低电平。但是当Linux启动后,在示波器上发现,该GPIO又被重新置高了。即Linu内核对GPIO有一个设置值,如何控制该值,从而让GPIO在整个系统启动过程一直保持低电平?
步骤
u-boot中的GPIO设置
在板级文件u-boot/board/set/am335-cfe/mux.c(mux.c文件位置会依据项目的不同而不同,请参考本博客u-boot移植的相关文档) 中添加GPIO管脚的复用配置:
static struct module_pin_mux gpio2_2_pin_mux[] = {
{OFFSET(gpmc_advn_ale), (MODE(7) | PULLUDEN)}, /* GPIO2_2 */
{-1},
};
...
void enable_board_pin_mux(void)
{
...
if (board_is_set_cfe()) {
configure_module_pin_mux(mmc0_pin_mux_cfe);
configure_module_pin_mux(rgmii1_pin_mux);
configure_module_pin_mux(gpio2_2_pin_mux);
}
...
}
在此,使用的是GPIO2_2, 这是由具体硬件决定的。