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关
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2019-06-21 TCP/IP illustrated 第九、十章 IP Routing & Dynamic Routing Protocols