当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > WRTnode 进阶篇-gpio的使用

WRTnode 进阶篇-gpio的使用 时间:2018-09-29      来源:未知

GPIO资源

WRTnode1的GPIO的对应关系请参考mt7620的datasheet WRTnode2的GPIO的对应关系请参考mt7688的datasheet

mt7620n.dtsi里对gpio的注册我们假定$(TOPDIR)为OpenWrt的编译目录。 在$(TOPDIR)/target/linux/ramips/dts/mt7620n.dtsi里有对gpio的注册 注:结合mt7620的datasheet里GPIO pin share schemes以及在mt7620n.dtsi里我们看到有,将GPIO#0到GPIO#72(中间有仅仅做GPO或GPI的)分为四组GPIO0-GPIO3; 对应GPIO0是从GPIO#0开始到GPIO#23,一共有24个;对应GPIO1是从GPIO#24开始到GPIO#39,一共有16个;对应GPIO2是从GPIO#40开始到GPIO#71,一共有32个; 对应GPIO3对应的是GPIO#72,仅有一个。

在WRTNODE.dts里对led、keys等的注册 在$(TOPDIR)/target/linux/ramips/dts/WRTNODE.dts里可以来注册通过gpio接口控制的设备,如led、keys等 如果想用GPIO接口首先要使能GPIO并且释放gpio引脚复用功能: 引脚复用的定义在$(TOPDIR)/build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/linux-ramips_mt7620n/linux-3.10.28/arch/mips/ralink/mt7620.c 注:路径不一定为这个,根据你自己的内核版本,linux-3.10.xx 同理,其他复用引脚的定义一样。

dts里注册led、按钮

下面就来看如何在WRTNODE.dts里注册具体的gpio设备(led,key等等),注册的方法可以参照 $(TOPDIR)/target/linux/ramips/dts/RT-N14U.dts 注:dts里对设备的注册很简单,如gpio-leds的注册,compatible要与Led的驱动leds-gpio.c里compatible对应,label是设备的名字,设备注册成功,在WRTnode文件系统下就会有 /sys/class/leds/wrtnode:blue:wan , 我们可以通过

echo 1 > /sys/class/leds/wrtnode\:blue\:wan/brightness

echo 0 > /sys/class/leds/wrtnode\:blue\:wan/brightness  来控制亮灭

gpios = <&gpio2 0 1>,这是指定对应的gpio引脚(GPIO#40)

用户空间gpio的调用

用户空间访问gpio,即通过sysfs接口访问gpio 控制GPIO的目录位于:/sys/class/gpio

/sys/class/gpio/export export 用于通知系统需要导出控制的GPIO引脚编号

/sys/class/gpio/unexport

unexport 用于通知系统取消导出

/sys/class/gpio/gpiochipX gpiochipX 表示的就是一个gpio_chip,用来管理和控制一组gpio端口的控制器 目录保存系统中GPIO寄存器的信息,包括每个寄存器控制引脚的起始编号base,寄存器名称或标志label,引脚总数ngpio

/sys/class/gpioN gpioN 指代具体的gpio引脚,目录下有如下属性文件 direction 表示gpio端口的方向,读取结果是in或out。 value 表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平 edge 表示中断的触发方式

导出一个引脚的操作步骤 1.计算此引脚编号,引脚编号 = 控制引脚的寄存器基数 + 控制引脚寄存器位数(偏移量) 2.向/sys/class/gpio/export写入此编号,比如0号引脚,在shell中可以通过以下命令实现,命令成功后生成/sys/class/gpio/gpio0目录,如果没有出现相应的目录,说明此引脚不可导出:

echo 0 > /sys/class/gpio/export

3./sys/class/gpio/gpio0下direction文件,定义输入输出方向 定义为输出:

echo out > direction

定义为输入:

echo in > direction

4:/sys/class/gpio/gpio0下value文件 value 表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平

echo 1 > value

导出gpio0引脚

将GPIO注册为一个led灯、按钮

配置

"make menuconfig"命令进入配置界面,选择Led、Button驱动(默认编译的时候已经选上) 选择len、button驱动 Led 驱动:

LED modules    --->   <*> kmod-leds-gpio

                      <*> kmod-ledtrig-usbdev

Button 驱动:

Other modules  --->   <*> kmod-gpio-button-hotplug.

修改dts注册led、按钮(以WRTnode1为准) 打开并修改WRTNODE.dts 添加相关设备树、注册一个led灯 其中WRTnode1的led灯添加如下:

+    gpio-leds {

+        compatible = "gpio-leds";

+        indicator {

+            label = "wrtnode:blue:indicator";

+            gpios = <&gpio1 14 1>;

+        };

+    };

compatible要与Led的驱动leds-gpio.c里compatible对应。label是设备的名字,在文件系统/sys/class/leds/目录下设备名对应 gpios = <&gpio1 14 1>,这是指定对应的gpio引脚(GPIO#38) 注册Button

+    gpio-keys-polled {

+       compatible = "gpio-keys-polled";

+        #address-cells = <1>;

+        #size-cells = <0>;

+        poll-interval = <20>;

+        reset {

+            label = "reset";

+            gpios = <&gpio0 1 1>;

+            linux,code = <0x198>;

+          };

+    };

上一篇:sigaction的使用

下一篇:C#错误调试方法

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部