博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用户态使用gpio监听中断
阅读量:4070 次
发布时间:2019-05-25

本文共 1408 字,大约阅读时间需要 4 分钟。

比如我想监听PA7上的电平变化(也就是边沿触发),那么应该先向“/sys/class/gpio/gpio7/direction”写入“in”,然后向“/sys/class/gpio/gpio7/edge”写入“both”,然后对”/sys/class/gpio/gpio7/value”执行select/poll操作。

代码如下:

poll_test.c

#include 
#include
#include
#include
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()确实能检测到电平变化。

转载地址:http://hgqji.baihongyu.com/

你可能感兴趣的文章
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
Golang 数据可视化利器 go-echarts ,实际使用
查看>>
mysql 跨机器查询,使用dblink
查看>>
mysql5.6.34 升级到mysql5.7.32
查看>>
dba 常用查询
查看>>
Oracle 异机恢复
查看>>
Oracle 12C DG 搭建(RAC-RAC/RAC-单机)
查看>>
Truncate 表之恢复
查看>>
Oracle DG failover 后恢复
查看>>
mysql 主从同步配置
查看>>
为什么很多程序员都选择跳槽?
查看>>
mongdb介绍
查看>>
mongdb在java中的应用
查看>>
Yotta企业云盘更好的为媒体广告业服务
查看>>
Yotta企业云盘助力科技行业创高峰
查看>>
Yotta企业云盘更好地为教育行业服务
查看>>
Yotta企业云盘怎么帮助到能源化工行业
查看>>
企业云盘如何助力商业新发展
查看>>