微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 第九篇?pt2262无线遥控input子系统驱动带源码,带视频演示。

第九篇?pt2262无线遥控input子系统驱动带源码,带视频演示。

时间:10-02 整理:3721RD 点击:
本来要用蓝牙遥控的,但是我手里的2541,好像是蓝牙4.0的,我的手机连接不上,找了我同学,也没有连上,图片如下:


索性先放一边吧,拿着手里的PT2262和PT2272,做发送和接收吧。
先普及下PT2262的接收形式:



当发送和接收对应的地址匹配时,对应的引脚会输出高电平。这就类似按键的情况了。所以,采用了input子系统的架构。
源码如下:

  1. #include
  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
  10. #include
  11. #include

  12. MODULE_LICENSE("GPL");
  13. MODULE_AUTHOR("iysheng ");

  14. #define GPIO_PT2262 4
  15. #define BUF_LEN 8
  16. #define PT_NAME "pt2262"

  17. struct input_dev *pt_input_dev;

  18. int gpio_pt2262[GPIO_PT2262]={49,60,51,50};
  19. int irq_gpio[GPIO_PT2262];


  20. irqreturn_t pt2262_isr(int irq, void *gpio_num)
  21. {
  22.         int i,j;
  23.         int *gpio_num_tmp = (int *)gpio_num;
  24.         j = gpio_get_value(*gpio_num_tmp);       
  25.         for(i=0; i evbit);
  26.         //set_bit(EV_SYN, pt_input_dev->evbit);

  27.         set_bit(KEY_A, pt_input_dev->keybit);
  28.         set_bit(KEY_B, pt_input_dev->keybit);
  29.         set_bit(KEY_C, pt_input_dev->keybit);
  30.         set_bit(KEY_D, pt_input_dev->keybit);

  31.         pt_input_dev->name = PT_NAME;
  32.         /*注册输入设备*/
  33.         ret = input_register_device(pt_input_dev);
  34.        
  35.         for(i=0; i<GPIO_PT2262; i++)
  36.         {
  37.                 sprintf(gpio_name_buf, "pt_gpio%d", i);
  38.                 ret = gpio_request(gpio_pt2262[i], gpio_name_buf);
  39.                 if(ret < 0)
  40.                         goto fail;
  41.                 gpio_direction_input(gpio_pt2262[i]);
  42.                 gpio_export(gpio_pt2262[i], false);
  43.                 irq_gpio[i] = gpio_to_irq(gpio_pt2262[i]);
  44.                 ret = request_irq(irq_gpio[i], pt2262_isr, IRQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING, "pt_isr", (void*)(gpio_pt2262+i));
  45.                 if(ret < 0)
  46.                         goto fail;
  47.         }


  48. fail:
  49.         return ret;
  50.        
  51. }
  52. module_init(pt_init);

  53. void __exit pt_exit(void)
  54. {
  55.         int i;
  56.         for(i=0; i<GPIO_PT2262; i++)
  57.         {
  58.                 free_irq(irq_gpio[i], gpio_pt2262+i);
  59.                 gpio_unexport(gpio_pt2262[i]);
  60.                 gpio_free(gpio_pt2262[i]);               
  61.         }
  62.         /*取消注册输入设备*/
  63.         input_unregister_device(pt_input_dev);
  64.         /*释放输入设备*/
  65.         input_free_device(pt_input_dev);
  66.        
  67. }
  68. module_exit(pt_exit);

复制代码

实验的效果截图:


着重分析下,输出的重要数据表达的意思,这些都可以从内核源码里面分析出来。


最后附上视频演示:
http://v.youku.com/v_show/id_XMTgyNTcxOTgwOA==.html

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top