zoukankan      html  css  js  c++  java
  • linux gpio子系统 devicetree中GPIO_ACTIVE_LOW

    一直没怎么理解GPIO_ACTIVE_LOW的作用

    虽然看了wowo的致驱动工程师的一封信 (转)

    对于以上的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 = <&portc 0 0>;

    /* 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关

  • 相关阅读:
    自定义view分析-Pull-to-Refresh.Rentals-Android
    laucher-icon的加载过程
    android shape 布局文件
    android canvas
    解释器模式(Interpreter)
    中介者模式(Mediator)
    Code obfuscation
    Table Tennis Game 2
    最小公倍数的对数
    C语言基础
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/13307836.html
Copyright © 2011-2022 走看看