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

第一章 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);//申请中断
		
}
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值