用户态使用gpio监听中断
来源:互联网 发布:直播网络说唱歌曲大全 编辑:程序博客网 时间:2024/06/06 10:06
比如我想监听PA7上的电平变化(也就是边沿触发),那么应该先向“/sys/class/gpio/gpio7/direction”写入“in”,然后向“/sys/class/gpio/gpio7/edge”写入“both”,然后对”/sys/class/gpio/gpio7/value”执行select/poll操作。
代码如下:
poll_test.c
#include <stdio.h>#include <fcntl.h>#include <poll.h>#include <unistd.h>int main(){ int fd=open("/sys/class/gpio/gpio7/value",O_RDONLY); if(fd<0) { perror("open '/sys/class/gpio/gpio7/value' failed!\n"); return -1; } struct pollfd fds[1]; fds[0].fd=fd; fds[0].events=POLLPRI; while(1) { if(poll(fds,1,0)==-1) { perror("poll failed!\n"); return -1; } if(fds[0].revents&POLLPRI) { if(lseek(fd,0,SEEK_SET)==-1) { perror("lseek failed!\n"); return -1; } char buffer[16]; int len; if((len=read(fd,buffer,sizeof(buffer)))==-1) { perror("read failed!\n"); return -1; } buffer[len]=0; printf("%s",buffer); } } return 0;}
这个小程序的作用就是就是不断poll(“/sys/class/gpio/gpio7/value”)。一旦poll()返回,就输出PA7的值。
假设代码放在~目录下,然后输入如下命令:
cd ~gcc poll_test.c -o poll_testecho in > /sys/class/gpio/gpio7/directionecho both > /sys/class/gpio/gpio7/edge./poll_test
用1K电阻把PA7上拉到VCC,然后用一根导线把PA7与GND连接又断开,会发现不断输出1和0(当PA7连上GND的瞬间输出0,与GND断开的瞬间输出1)。说明poll()确实能检测到电平变化。
阅读全文
0 0
- 用户态使用gpio监听中断
- 在用户态下使用gpio中断
- GPIO中断使用
- GPIO中断使用小结
- GPIO中断
- 中断gpio
- GPIO中断
- linux GPIO中断的使用笔记
- WinCE下使用GPIO中断功能
- 嵌入式Linux下使用GPIO中断功能
- 关于ESP8266 GPIO中断使用的总结
- 关于ESP8266 GPIO中断使用的总结
- 通过sysfs在用户空间使用GPIO
- 通过sysfs在用户空间使用GPIO
- LPC2378上用ST16C2550扩展串口使用GPIO中断
- STM32F103 GPIO的外部中断的使用例子。
- ESP8266 RTOS SDK使用GPIO中断的方法
- omap35xx GPIO 中断
- string字符串操作以及整数和字符转换的总结
- banner无限轮播
- CS231n Spring 2017 homework
- linux指令学习网络篇
- Android 分享到新浪微博
- 用户态使用gpio监听中断
- String常量池
- Mac nginx运行遇到的错误
- 文本换行和超出一行显示省略号
- WebService两种发布协议--SOAP和REST的区别
- 2017.7.27 wpf项目 Reflector
- 简要分析Java多进程编程的并发控制
- 字符串查找算法
- 棋盘问题(回溯法)