瑞芯微Rockchip开发者社区
直播中

张莹

7年用户 979经验值
私信 关注
[问答]

gpio设置成输入输出模式的过程是怎样的?

gpio设置成输入输出模式的过程是怎样的?

回帖(1)

何柳青

2022-3-4 14:07:54
1、输出引脚


reset-gpios = <&gpio0 GPIO_D1 GPIO_ACTIVE_HIGH>;

以上参数分别对应:引脚的名称,第几组gpio,第几个引脚,工作模式
注:以上配置对应为 GPIO0_D1

2、输入(中断)引脚


irq-gpios = <&gpio1 GPIO_B0 IRQ_TYPE_LEVEL_LOW>;

以上参数分别对应:引脚的名称,第几组gpio,第几个引脚,工作模式
注:以上配置对应为 GPIO1_B0

第二章 dts和驱动代码的实现


1、完整的dts


gt9xx@5d {
                // ---------- 复位对应 GPIO0_D1
                reset-gpios = <&gpio0 GPIO_D1 GPIO_ACTIVE_HIGH>;
                // ---------- 中断引脚 GPIO1_B0
                irq-gpios = <&gpio1 GPIO_B0 IRQ_TYPE_LEVEL_LOW>;
};

2、驱动代码


2.1、找到dts中对应的引脚


使用API:of_get_named_gpio获取到引脚的编号。

rst_gpio = of_get_named_gpio(np, "reset-gpios", 0);//获取gpio
irq_gpio = of_get_named_gpio(np, "irq-gpios", 0);//获取中断的gpio

2.2、检查引脚状态


使用API:gpio_is_valid检查引脚状态,返回1表示引脚可操作。
if (!gpio_is_valid(rst_gpio))//检查gpio
        printk( "No valid rst gpio");
if (!gpio_is_valid(irq_gpio))
                printk( "No valid irq gpio");

2.3、释放引脚


if (gpio_is_valid(rst_gpio))//检查引脚可操作
                gpio_free(rst_gpio);//释放复位引脚
if (gpio_is_valid(irq_gpio))//检查引脚可操作
                gpio_free(irq_gpio);//释放中断引脚

注:获取、检查和释放使用的API都是一样的方法

2.4、gpio设置成输入输出模式


普通gpio引脚的控制

if (gpio_is_valid(rst_gpio)) {//检查引脚是否可用
        gpio_direction_output(rst_gpio, 0);//设置成输出低电平
        gpio_direction_output(rst_gpio, 1);//设置成输出高电平
        gpio_direction_input(rst_gpio);//设置成输入模式
}

中断引脚的控制

if (gpio_is_valid(irq_gpio)){
                        gpio_direction_output(irq_gpio, 0);//设置成输出低电平
                        gpio_direction_output(irq_gpio, 1);//设置成输出高电平
}

将中断引脚转成中断模式

if (gpio_is_valid(irq_gpio)){
                irq = gpio_to_irq(irq_gpio);//返回值是中断号
                ret = request_threaded_irq(irq, NULL,gtp_irq_handler,
                                irq_flags | IRQF_ONESHOT,name,ts);//申请中断
               
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分