瑞芯微RK3128的gpio控制--输入输出和中断

本文介绍了GPIO在设备树(dts)中的配置方法,包括输出和输入引脚的设置,并详细解析了如何在驱动代码中获取、检查和释放GPIO引脚。通过示例展示了GPIO作为输出和中断输入的工作模式,并阐述了中断引脚转换为中断模式的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章 gpio的dts设置

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);//申请中断
		
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值