linux 标准 GPIO 操作

Linux 提供了GPIO 操作的 API,具体初始化及注册函数在 driver/gpio/lib_gpio.c 中实现。

 

#include   

int gpio_request(unsigned gpio, const char *label);

获得并占有 GPIO port 的使用权,由参数 gpio 指定具体 port。非空的label指针有助于诊断。主要告诉内核这块地址被占用了。当其他地方调用同一地址的gpio_request就会报告错误,该地址已经被申请。在/proc/mem有地址占用表描述。先申请在访问的好处是避免资源竞争。

void gpio_free(unsigned gpio);

释放 GPIO port 的使用权,由参数 gpio 指定具体 port。

 

int gpio_direction_input(unsigned gpio);

将 GPIO port(由参数 gpio 指定)设为输入。

 

int gpio_direction_output(unsigned gpio, int value);

将 GPIO port(由参数 gpio 指定)设为输出,并指定输出电平值(value)。

 

int gpio_get_value(unsigned gpio);

获得 GPIO port 上的电平值并返回。

void gpio_set_value(unsigned gpio, int value);

设置 GPIO port 上的电平。

int gpio_to_irq(unsigned gpio);

通过获得 gpio port 对应的 irq number。

 

int gpio_cansleep(unsigned gpio)

这个主要区分是挂载在外部总线上的GPIO控制器,还是内部的GPIO控制器。因为外部总线上的GPIO控制器可以休眠,所以用这个来区分是否是扩展的GPIO,返回1是扩展的GPIO,0的话就是内部的GPIO。

 

int gpio_get_value_cansleep(unsigned gpio);

void gpio_set_value_cansleep(unsigned gpio, int value);

这些都是对可以休眠扩展的gpio的操作

 

static inline int gpio_is_valid(int number) 判断GPIO是否有效,有效返回0

int gpio_export(unsigned gpio, booldirection_may_change);

void gpio_unexport();

//在 /sys/class/gpio/下面创建和取消对应的gpio号

int gpio_export_link(struct device *dev, const char *name, unsigned gpio)

//创建到导出GPIO的 sysfs link ,第一个参数是在哪个dev下创建,第二个是参数名字,第三个是gpio编号

时间: 2024-08-23 15:02:13

linux 标准 GPIO 操作的相关文章

Linux应用层直接操作GPIO

Linux应用层直接操作GPIO 在一个老手的指导下,应用层可以直接操作GPIO,具体指设置GPIO的输入输出以及输出电平高或者低.这个大大地提高了灵活性,官方的文档有GPIO Sysfs Interface for Userspace,GPIO Sysfs. 这里我记录一下使用过例子: # RK30_PIN0_PD4 # A0-7 -> 0-7 / B0-7 -> 8-15 / C0-7 -> 16-23 / D0-7 -> 24-31 echo 28 > /sys/cla

Linux C语言操作MySQL

原文:Linux C语言操作MySQL 1.MySQL数据库简介 MySQL是一个开源码的小型关系数据库管理系统,体积小,速度快,总体成本低,开源.MySQL有以下特性: (1) 使用C和C++编写,并使用了多种编译器进行测试,保证源码的可移植性. (2) 支持多线程,利用CPU资源,支持多用户. (3) 可以处理拥有上千万条记录的大型数据库. (4)既可以作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为 一个库而嵌入到其他软件中去.   2. MySQL数据库的安装 安装MySQ

linux终端vim操作系统模拟问题

问题描述 linux终端vim操作系统模拟问题 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> int main( void ) { struct process{ char pname[3]; char *next; int act; int runt; char sta; }; int a[5]; int i,j=0,m,n,u=1,o; int curre

fortran语言-请教这个fortran脚本怎么用?据说是把txt文件转化成cst文件 linux下怎么操作 谢谢

问题描述 请教这个fortran脚本怎么用?据说是把txt文件转化成cst文件 linux下怎么操作 谢谢 下面是.f文件具体内容 parameter(npointp=900000) real x(900000),y(900000) integer num(900000),linenum(900000),npl(900000),lnum,nplt, * lasti,i,j open(10, file='coastline.txt') open(11, file='coastline.cst')

c-求 linux 标准 C 语言判断2个字符串的一个函数

问题描述 求 linux 标准 C 语言判断2个字符串的一个函数 函数的原型为: int diff_str(const char * a, const char * b); 主要是用来处理当A和B 中存在有符号点 "." 或星号 "*"时的判断关系. 星号出现的(位置不定),且 (不限制长度) 匹配 [a-z0-9] 中包含的字符. 注意: 星号不能匹配 "." 例如: a="hello*world"; b="hel

linux下poi操作excel的问题

问题描述 linux下poi操作excel的问题 System.out.println("excek保存路径"+path); Workbook workbook=null; Sheet sheet=null; try { System.out.println("开始写excel"); workbook = new SXSSFWorkbook(500); sheet = workbook.createSheet(); workbook.setSheetName(0,

Android(Linux)控制GPIO方法二

前文<Android(Linux)控制GPIO的方法及实时性分析>主要使用Linux shell命令控制GPIO,该方法可在调试过程中快速确定GPIO硬件是否有问题,即对应的GPIO是否受控.实际项目中,一般需要对GPIO做特殊控制,如车载导航系统开机就给GPS模块上电,或在daemon程序中控制GPIO给一个脉冲以Reset蓝牙模块等,就不便用shell 命令来控制,而需要另想办法. http://elinux.org/RPi_GPIO_Code_Samples#sysfs介绍了如何在C代码

linux C 数组操作

/****************************************************************** * linux C 数组操作 * 声明: * 本文为解决陈颖奇遇到的C数组操作上的问题,主要是验证. * * 2016-2-2 深圳 南山平山村 曾剑锋 *****************************************************************/ #include <stdio.h> #define ARRAY_LENG

Linux系统编程:标准IO操作--索引对应路径下的文件

#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #define MAX_FILE_NUM 128 #define MAX_PATH_LE