linux gpio 子系统

1.gpio 子系统顾名思义,就是用于初始化 GPIO 并且提供相应的 API 函数。

比如设置 GPIO为输入输出,读取 GPIO 的值等。

gpio 子系统的主要目的就是方便驱动开发者使用 gpio,驱动开发者在设备树中添加 gpio 相关信息,然后就可以在驱动程序中使用 gpio 子系统提供的 API函数来操作 GPIO。

2.使用 pinctrl 和 gpio 子系统来完成 LED 灯驱动

      1)添加pinctrl信息,在 iomuxc 节点。

pinctrl_led: ledgrp {
    fsl,pins = <
                 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
               >; 
};

       2)检查当前设备树中要使用的IO有没有被其他设备使用,如果有的话要处理。

       3)添加设备节点,在设备节点中创建一个属性,此属性描述所使用的gpio。

          在根节点“/”下创建 LED 灯节点
 

gpioled {
    #address-cells = <1>;
    #size-cells = <1>;
    compatible = "atkalpha-gpioled";
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_led>;
    led-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;
    status = "okay";
};

设备树编写完成以后使用“ make dtbs”命令重新编译设备树,然后使用新编译出来的imx6ull.dtb 文件启动 Linux 系统。
      

4)编写驱动,获取对应的gpio编号,并申请IO,成功以后即可使用此Io

驱动中对gpio的函数操作

 /* 1,获取设备节点 */
    gpioled.nd = of_find_node_by_path("/gpioled");
  
    /* 2, 获取LED所对应的GPIO */
    gpioled.led_gpio = of_get_named_gpio(gpioled.nd, "led-gpios", 0);

    /* 3,申请IO */
    ret = gpio_request(gpioled.led_gpio, "led-gpio");

    /* 4,使用IO,设置为输出 */
    ret = gpio_direction_output(gpioled.led_gpio, 1);

    /* 5,输出底电平,点亮LED灯*/
    gpio_set_value(gpioled.led_gpio, 0);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值