gpio1节点:GPIO子系统常用函数

gpio1节点:GPIO子系统初窥

  • GPIO1控制器的寄存器基地址

  • 类似的还有gpio2~5

gpio1节点

imx6ull.dtsi

gpio1: gpio@209c000 {
				compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
				reg = <0x209c000 0x4000>;
				interrupts = <GIC_SPI 66 IRQ_TYPE_LEVEL_HIGH>,
					     <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;
				clocks = <&clks IMX6UL_CLK_GPIO1>;  //初始化GPIO外设时钟的
				gpio-controller;
				#gpio-cells = <2>;
				interrupt-controller;
				#interrupt-cells = <2>;
				gpio-ranges = <&iomuxc  0 23 10>, <&iomuxc 10 17 6>,
					      <&iomuxc 16 33 16>;
			};
  • compatible:与GPIO子系统的平台驱动做匹配

  • reg:GPIO寄存器的基地址

在这里插入图片描述

  • interrupts:GPIO中断相关

  • clocks:GPIO外设时钟相关

  • gpio-controller:表示 gpio1 节点是个 GPIO 控制器

  • #gpio-cells:表示要用2个cell描述一个 GPIO引脚

  • interrupt-controller:表示 gpio1 节点是个中断控制器

  • #interrupt-cells:表示要用2个cell描述一个中断

  • gpio-ranges:gpio编号转换成pin编号

imx6ull-seeed-npi.dts

新增rgb_led节点,使用gpio子系统

rgb_led{
    #address-cells = <1>;
    #size-cells = <1>;
    pinctrl-names = "default";
    compatible = "fire,rgb_led";
    pinctrl-0 = <&pinctrl_rgb_led>;
    rgb_led_red = <&gpio1 4 GPIO_ACTIVE_LOW &gpio1 10 GPIO_ACTIVE_LOW>;
    rgb_led_green = <&gpio4 20 GPIO_ACTIVE_LOW>;
    rgb_led_blue = <&gpio4 19 GPIO_ACTIVE_LOW>;
    status = "okay";
};
  • rgb_led_red:自定义属性,&gpio1 4表示GPIO1_IO04,GPIO_ACTIVE_LOW表示低电平有效
常用函数
of_find_node_by_path()函数

找到新增加的rgb_led节点

函数原型:

inline struct device_node *of_find_node_by_path(const char *path)

参数:

  • path:设备树节点的绝对路径

返回值:

  • 成功:目标节点

  • 失败:NULL

of_get_named_gpio()函数

函数原型:

static inline int of_get_named_gpio(struct device_node *np,const char *propname, int index)

参数:

  • np:指定的设备树节点
  • propname:GPIO属性名 rgb_led_green
  • index:引脚索引值

返回值:

  • 成功:GPIO编号
  • 失败:负数
gpio_request()函数

把我们使用到的GPIO引脚添加到pinctrl子系统里面去

函数原型:

static inline int gpio_request(unsigned gpio, const char *label)

参数:

  • gpio:要申请的GPIO编号
  • label:给 gpio 设置个名字

返回值:

  • 成功:0
  • 失败:负数
gpio_free()函数

函数原型:

static inline void gpio_free(unsigned gpio);

参数:

  • gpio:要释放的GPIO编号

返回值:

gpio_direction_output()函数

函数原型:

static inline int gpio_direction_output(unsigned gpio , int value)

参数:

  • gpio:要操作的GPIO编号

  • value:设置默认输出值

返回值:

  • 成功:0
  • 失败:负数
gpio_direction_input()函数

函数原型:

int gpio_direction_input(unsigned gpio)

参数:

  • gpio:要操作的GPIO编号

返回值:

  • 成功:0
  • 失败:负数
gpio_get_value()函数

获取引脚输入状态的

函数原型:

#define gpio_get_value __gpio_get_value
int __gpio_get_value(unsigned gpio)

参数:

  • gpio:要操作的GPIO编号

返回值:

  • 成功: GPIO的电平值
  • 失败:负数
gpio_set_value()函数

获取引脚输出高低电平

函数原型:

#define gpio_set_value __gpio_set_value
void __gpio_set_value(unsigned gpio, int ;)

参数:

  • gpio:要操作的GPIO编号
  • value:要设置的输出值

返回值:

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值