zoukankan      html  css  js  c++  java
  • 树莓派GPIO中断驱动程序

    按下按钮产生中断,在中断处理程序中打开或关闭LED灯。

    原理图

    接线方式如下图,GPIO25通过10K上拉电阻接3.3V,按下按钮开关后GPIO为0V,用10uF电容消除抖动。GPIO8接LED。

    程序

     1 /* Raspberry pi GPIO interrupt processing example
     2  * Light on LED with BUTTON press
     3  */
     4 
     5 #include <linux/init.h>
     6 #include <linux/module.h>
     7 #include <linux/gpio.h>
     8 #include <linux/interrupt.h>
     9 
    10 #define BUTTON_PIN 25    /* GPIO 25 */
    11 #define LED_PIN 8    /* GPIO 8 */
    12 
    13 int flag = 0;
    14 
    15 static irqreturn_t irq_handler(int irq, void *dev)
    16 {
    17     gpio_set_value(LED_PIN, !gpio_get_value(LED_PIN));
    18     return IRQ_HANDLED;
    19 }
    20 
    21 static int led_init(void)
    22 {
    23     int err;
    24     
    25     printk(KERN_INFO "LED init
    ");
    26     
    27     err = gpio_request_one(BUTTON_PIN, GPIOF_IN, "Light Button");
    28     if (err) return err;
    29 
    30     err = gpio_request_one(LED_PIN, GPIOF_OUT_INIT_LOW, "LED light");
    31     if (err) return err;
    32 
    33     enable_irq(gpio_to_irq(BUTTON_PIN));
    34     err = request_irq(gpio_to_irq(BUTTON_PIN), irq_handler, 
    35             IRQF_TRIGGER_FALLING, "LED Test", NULL);
    36     if (err < 0) {
    37         printk("irq_request failed!
    ");
    38         return err;
    39     }
    40     flag = 1;
    41     return 0;
    42 }
    43 
    44 static void led_exit(void)
    45 {
    46     printk(KERN_INFO "LED exit
    ");
    47     if(flag) free_irq(gpio_to_irq(BUTTON_PIN), NULL);
    48     gpio_free(BUTTON_PIN);
    49     gpio_free(LED_PIN);
    50 }
    51 
    52 
    53 module_init(led_init);
    54 module_exit(led_exit);
    55 
    56 MODULE_LICENSE("Dual BSD/GPL");
  • 相关阅读:
    ubuntu下minicom和usb串口转接
    linux下 驱动模块编译步骤
    linux下的压缩解压命令
    GitLab 数据备份和恢复
    GitLab 项目创建后地址由Localhost改为实际IP的方法
    GitLab-Runner 安装配置
    GitLab 的安装及汉化
    用yum rpm 快速安装zabbix agent
    RabbitMQ的用户管理方法
    Linux下安装部署RabbitMQ
  • 原文地址:https://www.cnblogs.com/brep/p/4281209.html
Copyright © 2011-2022 走看看