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

发布时间 2023-06-21 10:05:37作者: FBshark

一直没怎么理解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关