Linux中gpio接口的使用方法示例

前言

Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的

使用gpio

使用gpio接口需要包含#include <linux/gpio.h> ,在驱动中使用延时函数mdelay,需要包含#include <linux/delay.h>文件,Documentation/gpio.txt文件有作详细说明。

判断一个IO是否合法:

int gpio_is_valid(int number);

设置GPIO的方向,如果是输出同时设置电平:

/* set as input or output, returning 0 or negative errno */
int gpio_direction_input(unsigned gpio);
int gpio_direction_output(unsigned gpio, int value);

获取输入引脚的电平:

/* GPIO INPUT: return zero or nonzero */
int gpio_get_value(unsigned gpio);

/* GPIO OUTPUT */
void gpio_set_value(unsigned gpio, int value);

int gpio_cansleep(unsigned gpio);

/* GPIO INPUT: return zero or nonzero, might sleep */
int gpio_get_value_cansleep(unsigned gpio);

/* GPIO OUTPUT, might sleep */
void gpio_set_value_cansleep(unsigned gpio, int value);

获取一个GPIO并声明标签:

/* request GPIO, returning 0 or negative errno.
* non-null labels may be useful for diagnostics.
*/
int gpio_request(unsigned gpio, const char *label);

/* release previously-claimed GPIO */
void gpio_free(unsigned gpio);

将GPIO映射为IRQ中断:

/* map GPIO numbers to IRQ numbers */
int gpio_to_irq(unsigned gpio);

/* map IRQ numbers to GPIO numbers (avoid using this) */
int irq_to_gpio(unsigned irq);

设置GPIO的IRQ中断类型:

if (!sw->both_edges) {
 if (gpio_get_value(sw->gpio)) {
 set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_FALLING);
 } else {
 set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING);
 }
}

参考文章

Linux中的gpio口使用方法

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Linux中gpio接口的使用方法示例

    前言 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0-MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用的 使用gpio 使用gpio接口需要包含#include <linux/gpio.h> ,在驱动中使用延时函数

  • 初步解读Golang中的接口相关编写方法

    概述 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心. Go语言中的接口是一些方法的集合(method set),它指定了对象的行为:如果它(任何数据类型)可以做这些事情,那么它就可以在这里使用. 接口的定义和使用 比如 复制代码 代码如下: type I interface{     Get() int     Put(int)   } 这段话就定

  • 在SpringBoot项目中的使用Swagger的方法示例

    一. 首先Swagger是什么? Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步.Swagger官方API文档:https://swagger.io/ 作用:   1. 接口的文档在线自动生成.   2. 功能测试. Swagger的主见介绍:    Swagger Codegen: 通过Codegen 可

  • oracle中decode函数的使用方法示例

    decode的几种用法 1:使用decode判断字符串是否一样 DECODE(value,if1,then1,if2,then2,if3,then3,...,else) 含义为 IF 条件=值1 THEN RETURN(value 1) ELSIF 条件=值2 THEN RETURN(value 2) ...... ELSIF 条件=值n THEN RETURN(value 3) ELSE RETURN(default) END IF sql测试 select empno,decode(empn

  • linux中配置pptp服务器配置的方法

    1.验证内核是否加载了MPPE模块: modprobe ppp-compress-18 && echo MPPE is ok 2.安装所需的软件包: yum -y install ppp wget ftp://rpmfind.net/linux/epel/7/x86_64/p/pptpd-1.4.0-2.el7.x86_64.rpm rpm -ivh pptpd-1.4.0-2.el7.x86_64.rpm 3.配置PPP和PPTP的配置文件: grep ^[^#] /etc/ppp/op

  • python脚本当作Linux中的服务启动实现方法

    脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个时候我们可以把python脚本服务化,服务器重启后,脚本就会自动运行.解决服务器维护后需要手动运行python脚本. 实现方法: 1,给编写好的python脚本开头加上 #!/usr/bin/python 2,启动shell 脚本 编写 vi pystock.sh #vim /etc/init.d/

  • Linux中解除端口占用的方法

    在本例中,假设8080端口被占用. 1.查看8080端口是否被占用 netstat -anp | grep 8080 输出结果:tcp 0 0 :::8080 :::* LISTEN 3000/java 由上可知8080端口已经被开启. 2.查看占用8080端口的进程: fuser -v -n tcp 8080 输出结果: USER        PID   ACCESS COMMAND   8080/tcp:         zhu        1154    F.... java 3.杀死

  • 在Linux中使用history命令的方法

    用强大的 history 命令使你的命令行提示符更有效率. 随着我在终端中花费越来越多的时间,我感觉就像在不断地寻找新的命令,以使我的日常任务更加高效.GNU 的 history 命令是一个真正改变我日常工作的命令. GNU history 命令保存了从该终端会话运行的所有其他命令的列表,然后允许你重放或者重用这些命令,而不用重新输入它们.如果你是一个老玩家,你知道 history 的力量,但对于我们这些半吊子或新手系统管理员来说, history 是一个立竿见影的生产力增益. 历史 101 要

  • 浅析Java8 中 Map 接口的新方法

    我们提一个需求:给定一个 List<String> ,统计每个元素出现的所有位置. 比如,给定 list: ["a", "b", "b", "c", "c", "c", "d", "d", "d", "f", "f", "g"] ,那么应该返回: a : [

  • Java中生成唯一ID的方法示例

    有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一个唯一的全局ID. UUID 从Java 5开始, UUID 类提供了一种生成唯一ID的简单方法.UUID是通用唯一识别码 (Universally Unique Identifier)的缩写,UUID来源于OSF(Open Software Foundation,开源软件基金会)的DCE(Distributed Computing Environment,分布式计算环境)规范.UU

随机推荐