| 
 | 
 
 本帖最后由 alittle 于 2025-3-25 18:04 编辑  
 
功能测试说明: 
       
      在Linux系统中,通过sysfs接口导出指定的GPIO引脚,并将其配置为输入方向以及所需的中断触发方式(例如上升沿、下降沿等)。随后,编写一个简单的用户空间程序(以C语言为例),利用poll或select机制来监听该GPIO的中断事件。程序运行后,一旦GPIO引脚的电平变化符合设定的触发方式,系统便会生成中断信号。程序检测到中断后,会读取GPIO的值并打印相关信息,以此验证GPIO中断功能是否正常。 
 
准备工作: 
 
1、选择GPIO管脚: 
       
      -> 选择一个支持中断的GPIO管脚,例如GPIO506(对应GPIO0_2) 
      -> 再选择一个GPIO输出的管脚用于向测试管脚输出电平,例如GPIO493(对应GPIO1_5) 
 
2、硬件连接: 
       
      -> 在板卡上,使用杜邦线将GPIO0_2管脚与GPIO1_5管脚短接 
 
3、导出GPIO引脚到用户空间: 
- echo “506” > /sys/class/gpio/export
 
 - echo “493” > /sys/class/gpio/export
 
  复制代码 
4、设置GPIO方向: 
- echo “in” > /sys/class/gpio/gpio506/direction
 
 - echo “out” > /sys/class/gpio/gpio493/direction
 
  复制代码 
5、设置中断触发方式: 
      支持 none、rising、falling、both 
      -> 例如,设置为下降沿触发: 
- echo “falling” > /sys/class/gpio/gpio506/edge
 
  复制代码 
6、C语言应用测试例程: 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
 - #include <fcntl.h>
 
 - #include <unistd.h>
 
 - #include <poll.h>
 
  
- #define GPIO_NUM "506"
 
 - #define GPIO_PATH "/sys/class/gpio/gpio" GPIO_NUM "/value"
 
  
- int main() {
 
 -     int fd;
 
 -     struct pollfd pfd;
 
  
-     // 打开GPIO值文件
 
 -     fd = open(GPIO_PATH, O_RDONLY);
 
 -     if (fd < 0) {
 
 -         perror("Failed to open GPIO value file");
 
 -         return -1;
 
 -     }
 
  
-     // 初始化poll结构
 
 -     pfd.fd = fd;
 
 -     pfd.events = POLLPRI; // 监听优先级事件
 
  
-     printf("Waiting for GPIO %s interrupt...\n", GPIO_NUM);
 
  
-     while (1) {
 
 -         // 使用poll监听中断事件
 
 -         int ret = poll(&pfd, 1, -1); // 阻塞等待事件
 
 -         if (ret < 0) {
 
 -             perror("Poll failed");
 
 -             break;
 
 -         } else if (ret == 0) {
 
 -             printf("Poll timed out\n");
 
 -         } else {
 
 -             // 读取GPIO值
 
 -             lseek(fd, 0, SEEK_SET); // 移动文件指针到文件开头
 
 -             char value[2];
 
 -             read(fd, value, 2);
 
 -             printf("Interrupt detected! GPIO value: %s\n", value);
 
 -         }
 
 -     }
 
  
-     close(fd);
 
 -     return 0;
 
 - }
 
  复制代码 
7、编译应用程序: 
- gcc gpio_interrupt_demo.c -o gpio_interrupt_demo
 
  复制代码 
测试流程: 
 
1、执行应用测试demo,监测GPIO中断事件: 
 
2、控制GPIO1_5输出高低电平给GPIO0_2: 
- echo "0" > /sys/class/gpio/gpio493/value
 
 - echo "1" > /sys/class/gpio/gpio493/value
 
 - echo "0" > /sys/class/gpio/gpio493/value
 
 - echo "1" > /sys/class/gpio/gpio493/value
 
  复制代码 
3、测试结果: 
      
      -> 当GPIO1_5输出的电平从1到0变化时,应用测试demo打印 “interrupt detected! GPIO value: 0” 则表示下降沿中断可以正常触发并被正常监测,GPIO中断功能测试通过 
 
 
 
 
 
 
 
 
 
 
 |   
 
 
 
 |