在linux系统下,怎么检测外部中断GPIO是否触发 ,并用c语言编写测试demo


        在Linux系统下检测外部中断GPIO是否触发,通常需要通过文件系统与内核交互,通常用到的接口是/sys/class/gpio。以下是一个简单的步骤和C语言示例代码,用于检测GPIO中断。

步骤

1. 导出GPIO:
   首先需要将你要使用的GPIO端口导出到用户空间。假设我们使用GPIO 24。
   echo 24 > /sys/class/gpio/export


2. **设置GPIO方向:
   将GPIO设置为输入方向。
   echo "in" > /sys/class/gpio/gpio24/direction

3. 设置中断触发方式:
   可以选择none、rising、falling、both其中之一来设置中断触发方式。这里以下降沿触发为例。
   echo "falling" > /sys/class/gpio/gpio24/edge

4. 读取GPIO中断:
   使用C语言编写程序来检测GPIO中断触发。

C语言示例代码

以下是一个简单的C语言示例代码,用于检测GPIO 24的中断触发:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <poll.h>

#define GPIO_NUM "24"
#define GPIO_PATH "/sys/class/gpio/gpio" GPIO_NUM "/value"

int main() {
    int fd;
    struct pollfd pfd;
    char buf[3];

    // 打开GPIO value文件
    if ((fd = open(GPIO_PATH, O_RDONLY)) < 0) {
        perror("Failed to open gpio value");
        return -1;
    }

    // 将文件描述符添加到poll结构体中
    pfd.fd = fd;
    pfd.events = POLLPRI;

    // 先读取一次以清除当前可能的中断
    read(fd, buf, sizeof(buf));

    printf("Waiting for GPIO interrupt...\n");

    // 等待中断
    while (1) {
        // 使用poll等待中断事件
        int ret = poll(&pfd, 1, -1);

        if (ret > 0) {
            // 检查中断是否真的触发
            if (pfd.revents & POLLPRI) {
                lseek(fd, 0, SEEK_SET);  // 重置文件读取位置
                read(fd, buf, sizeof(buf));
                printf("GPIO interrupt occurred, value: %c\n", buf[0]);
            }
        } else {
            perror("poll");
        }
    }

    close(fd);
    return 0;
}


编译和运行

1. 保存代码到文件,比如gpio_interrupt.c
2. 编译代码:
        gcc -o gpio_interrupt gpio_interrupt.c
3. 运行程序:
        sudo ./gpio_interrupt

        确保你的用户有足够的权限操作GPIO,通常需要以root权限运行。此代码将持续等待GPIO 24的中断触发,并在触发时输出当前的GPIO值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大犇犇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值