linux中通用GPIO接口的操作
来源:互联网 发布:linux用户默认目录 编辑:程序博客网 时间:2024/04/20 15:33
转载地址:http://blog.csdn.net/cjyusha/article/details/50418862
在linux嵌入式设备开发中,对GPIO的操作是最常用的,在一般的情况下,一般都有对应的驱动,应用程序打开对应的驱动,然后通过ioctl函数就可以对其进行操作。在linux中,其实有一个通用的GPIO驱动,应用通过调用文件的形式来进行读写操作,这个文件是/sys/class/gpio,本文就简单的来讲解一下通用GPIO接口的读写。
一、 以echo的形式调用system函数进行操作,这种形式编程比较简单,结构比较清晰,如下:
- void set_gpio64_low(void)
- {
- system("echo 64 > /sys/class/gpio/export");
- system("echo out > /sys/class/gpio/gpio64/direction");
- system("echo 0 > /sys/class/gpio/gpio64/value");
- }
只要完成三个步骤,就可以了
- void set_gpio64_high(void)
- {
- system("echo 64 > /sys/class/gpio/export");
- system("echo out > /sys/class/gpio/gpio64/direction");
- system("echo 1 > /sys/class/gpio/gpio64/value");
- }
二、 通过文件的形式来调用
- int set_io_value_high(int gpio)
- {
- FILE *fp;
- char buffer[10];
- int value;
- char s[50]="";
- char s1[50]="";
- if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)
- {
- printf("Cannot open export file.\n");
- return -1;
- }
- fprintf(fp, "%d", gpio);
- fclose(fp);
- sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);
- if ((fp = fopen(s, "rb+")) == NULL)
- {
- printf("Cannot open %s.\n",s);
- return -1;
- }
- fprintf(fp, "out");
- fclose(fp);
- sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);
- if ((fp = fopen(s1, "rb+")) == NULL)
- {
- printf("Cannot open %s.\n",s1);
- return -1;
- }
- strcpy(buffer,"1");
- fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);
- fclose(fp);
- return 1;
- }
- int set_io_value_low(int gpio)
- {
- FILE *fp;
- char buffer[10];
- int value;
- char s[50]="";
- char s1[50]="";
- if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)
- {
- printf("Cannot open export file.\n");
- return -1;
- }
- fprintf(fp, "%d", gpio);
- fclose(fp);
- sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);
- if ((fp = fopen(s, "rb+")) == NULL)
- {
- printf("Cannot open %s.\n",s);
- return -1;
- }
- fprintf(fp, "out");
- fclose(fp);
- sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);
- if ((fp = fopen(s1, "rb+")) == NULL)
- {
- printf("Cannot open %s.\n",s1);
- return -1;
- }
- strcpy(buffer,"0");
- fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);
- fclose(fp);
- return 1;
- }
0 0
- linux中通用GPIO接口的操作
- linux中通用GPIO接口的操作
- linux中通用GPIO接口的操作
- linux中通用GPIO接口的操作--文件IO方式
- Linux GPIO - gpio.c(GPIO各个接口的实现)
- ARM开发之用linux通用GPIO接口宏函数操作IO口-----LED字符驱动为例
- linux通用GPIO驱动
- Linux 驱动中GPIO接口解析
- 嵌入式Linux系统中对GPIO操作的方法总结
- Linux内核中GPIO操作函数的使用方法
- linux的用户层GPIO接口管理
- Linux GPIO驱动 - GPIO通用层
- linux gpio接口
- linux gpio接口
- linux gpio接口 .
- linux gpio接口 .
- linux gpio接口
- linux gpio接口
- 【Python】Pycharm同步Github项目
- 理解Java的面向对象
- springMvc在web.xml文件的配置
- 安装RabbitMQ
- SPARK基础操作备忘
- linux中通用GPIO接口的操作
- 数据库学习之num1
- SQL与NOSQL
- Largest Divisible Subset
- 海洋内波简介
- SVN及Eclipse集成插件SVN
- leetcode-java-189. Rotate Array
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- Android网络编程(一)HTTP协议原理