linux gpio dev,linux gpio子系统 devicetree中GPIO_ACTIVE_LOW

本文详细解释了GPIO_ACTIVE_LOW和GPIO_ACTIVE_HIGH的概念及其在实际应用中的意义,通过具体实例展示了如何根据硬件特性调整GPIO配置来实现预期的功能。
AI助手已提取文章相关产品:

一直没怎么理解GPIO_ACTIVE_LOW的作用

对于以上的dts你应该再熟悉不过,当然这里不是教你如何使用dts,而是关注gpio和irq最后一个数字可以如何利用。例如rst-gpio的OF_GPIO_ACTIVE_LOW代表什么意思呢?

可以理解为低有效。什么意思呢?举个例子,正常情况下,我们需要一个gpio口控制灯,我们认为灯打开就是active状态。对于一个程序员来说,我们可以封装一个函数,写1就是打开灯,写0就是关灯。

但是对于硬件来说,变化的是gpio口的电平状态。如果gpio输出高电平灯亮,那么这就是高有效。如果硬件设计是gpio输出低电平灯亮,那么就是低有效。对于一个软件工程师来说,我们的期望是写1就是亮灯,写0就是关灯。

我可不管硬件工程师是怎么设计的。我们可以认为dts是描述具体的硬件。因此对于驱动来说,硬件的这种变化,只需要修改dts即可。软件不用任何修改。

还有有点模糊,但大概知道是将硬件逻辑隔离开来的意思。

后来突然自己想通了

gpio_set_value(led_dev.led_no,0);

gpio_set_value(led_dev.led_no,1);

gpio_set_value 设置的是逻辑电平,1 有效 0 无效

如果GPIO_ACTIVE_LOW  那么 1 有效 就是低电平 0 无效 就是高电平 (物理电平)

如果GPIO_ACTIVE_HIGH  那么 1 有效 就是高电平 0 无效 就是低电平 (物理电平)

led-gpio = ;

/* Bit 0 express polarity */

#define GPIO_ACTIVE_HIGH 0

#define GPIO_ACTIVE_LOW 1

所以是GPIO_ACTIVE_HIGH

PCB上低电平点亮,高定平熄灭

if(sta==LEDON){

gpio_set_value(led_dev.led_no,0); //0无效低电平点亮

}else if(sta==LEDOFF){

gpio_set_value(led_dev.led_no,1); //1有效高电平熄灭

}

感觉逻辑反了

应该是GPIO_ACTIVE_LOW 低有效 点亮灯

1 是点灯 0是熄灭 1开0关

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值