zoukankan      html  css  js  c++  java
  • 红外接收头在内核里的驱动

        #include <linux/init.h>
      3 #include <linux/module.h>
      4 #include <linux/interrupt.h>
      5 #include <linux/gpio.h>
      6 #include <mach/gpio.h>
      7 #include <linux/ktime.h>
      8 
      9 #define IR_IO GPIOL(11)
     10 
     11 int num = 0; //记录第几位数据
     12 int times[80]; //记录第几位数据所占用的时间 us
     13 
     14 void process()
     15 {
     16     int i, j, t;
     17 
     18     for (i = 0; i < 4; i++)
     19     {
     20         t = 0;
     21         for (j = 0; j < 8; j++)
     22         {
     23             if (times[i*8+j] > 2000)
     24                 t |= 1 << j;
     25         }
     26         printk("%02x ", t);
     27     }
     28     printk("
    ");
     29 }
     30 
     31 irqreturn_t irq_func(int irqno, void *arg)
     32 {
     33     s64 now = ktime_to_us(ktime_get());
     34     static s64 prev = -1;        //静态局部变量,只能执行一次,之后不会再赋值为-1;
     35     u32 offset = now - prev;
     36 
     37 
     38     if (-1 == prev)
     39     {
     40         prev = now;    //只会执行这一次,
                goto exit;
     42     }
     43 
     44     prev = now;
     45     //引导码周期时间为13.5ms
     46     if ((offset > 12800) && (offset < 14000))
     47     {
     48         num = 0; //收到引导码,准备接收第0位数据的周期时间
     49         goto exit;
     50     }
     51 
     52     times[num++] = offset;
     53     if (num > 32)
     54     {
     55         process();
     56         prev = -1;
     57         num = 0;
     58     }
     59 exit:
     60     return IRQ_HANDLED;
     61 }
     62 
     63 static int __devinit test_init(void)
     64 {
     65     int ret;
     66 
     67     ret = request_irq(gpio_to_irq(IR_IO), irq_func, IRQF_TRIGGER_FALLING, "myir", NULL);
     68     if (ret < 0)
     69         goto err0;
     70 
     71 
     72     return 0;
     73 err0:
     74     return ret;
     75 }
     76 
           static void __devexit test_exit(void)
     78 {
     79     free_irq(gpio_to_irq(IR_IO), NULL);
     80 }
     81 
     82 module_init(test_init);
     83 module_exit(test_exit);
     84 
     85 MODULE_LICENSE("GPL");
     86 
  • 相关阅读:
    【dp专题1】hdu1003 D
    #网络之宙斯盾航母#-----占位--------linux
    面向过程6-----#过程之王#----占个位-----汇编语言----(面向机器)
    面向过程5----c#
    高级语言学习总结
    js实现求二元一次方程的根
    小知识点总结
    js小案例,判断年龄是否成年
    js实现结婚吧小案例
    面向过程4-----perl
  • 原文地址:https://www.cnblogs.com/edan/p/9176219.html
Copyright © 2011-2022 走看看