一、前言
在开发中经常会涉及到GPIO的操作,虽然说大部分驱动代码都是厂家提供,但在适配时需要增加控制,或者控制逻辑出现了偏差,都是需要涉及gpio的操作。
二、示例代码操作
//static声明一个全局变量
static int gpio_sim = 0;
//通过名称从dts解析gpio属性并返回gpio编号。参1是指向gpio的设备结点 参2是dts的属性名称
gpio_sim = of_get_named_gpio_flags(pdev->dev.of_node, "gpio-sim", 0, NULL);
//申请gpio,获取gpio的访问权
gpio_request(gpio_sim, "gpio-sim");
//将gpio设为输出,参1是gpio号,参2是默认输出高电平
gpio_direction_output(gpio_sim, 1);
//将gpio设为输入
gpio_direction_input(gpio_sim);
//将gpio设为低电平
gpio_set_value(gpio_sim, 0);
//将gpio设为高电平
gpio_set_value(gpio_sim, 1);
三、adb或者串口操作GPIO
在开发中需要验证gpio的拉高拉低是否正常,但是总不能编译后再操作吧,所以采用快速操作gpio的方法。打开adb或者串口,进入sys/class/gpio目录
//添加gpio37接口,添加后该目录会有gpio37目录
echo 37 > export
//打开gpio37
cd gpio37
//将引脚配置为输入
echo "in" > direction
//将引脚配置为输出
echo "out" > direction
//设为高电平
echo 1 > value
//设为低电平
echo 0 > value
四、查看gpio
操作完gpio后可以敲cat d/gpio来查看gpio状态,例如:
gpio-166 ( |horn-gpio ) out hi
可以知道这个gpio为高,或者用万用表结合pcb来验证。
五、总结
这是基础中的基础,做这个笔记就是要让自己牢记。