• 树莓派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");
  • 相关阅读:
    c3p0用c3p0-config.xml方式配置 和 用spring配置时一点小区别
    mysql配置
    tomcat监控工具Probe
    tomcat配置
    jsp页面动态包含和静态包含
    servlet3的文件上传
    System.currentTimeMillis()和new Date().getTime()比较
    js-html2canvas导出html图片 导出pdf
    html中使用富文本编辑器
    Vue----vue-resource
  • 原文地址:https://www.cnblogs.com/brep/p/4281209.html
Copyright © 2020-2023  润新知