linux gpio dev,linux gpio子系统 devicetree中GPIO_ACTIVE_LOW
一直没怎么理解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关