[開發記錄] 函式庫調用 - GPIO控制 之二
来源:互联网 发布:mina 收不到数据 编辑:程序博客网 时间:2024/06/10 04:49
參考網路資料,找到另外的IO控制文件,
其中,devmem2是另外的工具程式,很容易在網路上找到相關的source code,編輯為執行檔後,讓IO控制程式可連結執行devmem2即可,
System命令,可用來執行shell層命令,先將須使用的Pin腳進行設定,將BeagleBoard-xM的GPIO130設定為GPIO功能,並設定是否pull-high等相關參數,
透過系統的 /sys/class/gpio/export 寫入需要控制的GPIO編號,系統將自行產生/sys/class/gpio/gpio<編號> 的資料夾,
便可使用 /sys/class/gpio/gpio<編號>/direction 設定為IN or OUT(此範例中設定為輸出),
以及使用 /sys/class/gpio/gpio<編號>/value 設定輸出的狀態數值 0 or 1 。
/* *IOCtrl_K_1.c**Author: Kim.Lui**Date: 2012-08-16**gpio 130 blanky */#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#include <time.h>#include <string.h>FILE *fp;int main(void){ system("devmem2 0x48002158 w 0x010C010C"); char set_value[4]; int toggle = 0; if (( fp = fopen("/sys/class/gpio/export", "ab")) == NULL) { printf("Can not open export file \n"); exit(1); } rewind(fp); strcpy(set_value, "130"); fwrite(&set_value, sizeof(char), 3, fp); fclose(fp);printf("GPIO 130 now exported \n"); if((fp = fopen("/sys/class/gpio/gpio130/direction", "rb+")) == NULL) { printf("Can not open GPIO130 direction file \n"); exit(1); } rewind(fp); strcpy(set_value, "out"); fwrite(&set_value, sizeof(char), 3, fp); fclose(fp); printf("GPIO 130 direction set to output\n"); if((fp = fopen("/sys/class/gpio/gpio130/value", "rb+")) == NULL) { printf("Can't open GPIO 130 value file"); exit(1); } rewind(fp); strcpy(set_value, "1"); fwrite(&set_value, sizeof(char), 1, fp); fclose(fp); printf("GPIO 130 set to 1\n");sleep(2);//IO keep high 3 sec if((fp = fopen("/sys/class/gpio/gpio130/value", "rb+")) == NULL) { printf("Can't open GPIO 130 value file"); exit(1); } rewind(fp); strcpy(set_value, "0"); fwrite(&set_value, sizeof(char), 1, fp); fclose(fp); printf("GPIO 130 set to 0\n");sleep(2);//IO keep low 3sec// IO blinky unsigned char i; for(i=0;i<100;i++) { if((fp = fopen("/sys/class/gpio/gpio130/value", "rb+")) == NULL) { printf("Can not open value file\n"); exit(1); } if(toggle == 0) {toggle=1; rewind(fp); strcpy(set_value, "1"); fwrite(&set_value, sizeof(char), 1 ,fp); fclose(fp); printf("...value set to 1\n"); } else {toggle=0;rewind(fp); strcpy(set_value, "0"); fwrite(&set_value, sizeof(char), 1 ,fp); fclose(fp); printf("...value set to 0\n"); } sleep(1); } return 0;exit(1);}
此方式已測試過,可正確執行控制,但似乎過多的程式碼,且不斷的寫入文字,應該有更為簡易的方式,或是將其中重複的設定整理為副程式,
可較有效率的控制IO,在程式閱讀上也會較容易理解。
- [開發記錄] 函式庫調用 - GPIO控制 之二
- [開發記錄] 函式庫調用 - GPIO控制 之一
- 树莓派入门二之GPIO控制LED灯
- STM32F412应用开发笔记之二:基本GPIO控制
- Am335x 之GPIO控制
- Am335x 之GPIO控制
- 【ARM】s3c2440之gpio按键控制
- Linux内核学习笔记之GPIO控制
- 树莓派瞎玩~5~控制GPIO之Python
- 树莓派瞎玩~6~控制GPIO之C语言
- mini2440之GPIO控制按键的方法
- 树莓派GPIO入门之控制LED灯
- GPIO控制
- STM32(二)之GPIO操作(2)——通过按键控制LED灯的开关
- tonyos学习笔记之二 GPIO驱动
- GPIO编程(二)led灯的控制
- openwrt 之GPIO之 led 和IO控制
- jz2440裸板开发之GPIO:用按键控制led
- Win32串口编程
- 避免软件延时被编译器优化
- tlb tlh tli文件(COM)
- $@ 与 $*的区别
- 类集框架(二)
- [開發記錄] 函式庫調用 - GPIO控制 之二
- 创建静态库Cocoa Touch Static Library
- Java JDK 为什么要封装类?
- ORA-01589错误的解决过程
- Polyrate
- Nutch中关于CrawlDb过程
- 开源搜索引擎Solr环境配置、中文分词、数据库做为索引源及索引操作
- C# 菜单
- INNO SETUP-批处理