mini2440 MP3播放器

发布时间:2024-06-20  

按键平台驱动:

platfrom_device.c:

  1. #include   

  2. #include   

  3. #include   

  4. #include   

  5. #include   

  6. #include   

  7. #include   

  8. #include   

  9. #include   

  10. #include   

  11. #include   

  12. #include   

  13. #include   

  14. #include   

  15. #include   

  16. #include   

  17. #include   

  18. #include   

  19. #include    

  20.   

  21. static struct resource key_resource[]=  

  22. {  

  23.     [0] = {  

  24.         .start = IRQ_EINT8,  

  25.         .end = IRQ_EINT8,  

  26.         .flags = IORESOURCE_IRQ,  

  27.     },  

  28.     [1] = {  

  29.         .start = IRQ_EINT11,  

  30.         .end = IRQ_EINT11,  

  31.         .flags = IORESOURCE_IRQ,  

  32.     },  

  33.     [2]= {  

  34.         .start = IRQ_EINT13,  

  35.         .end = IRQ_EINT13,  

  36.         .flags = IORESOURCE_IRQ,  

  37.     },  

  38.     [3] = {  

  39.         .start = IRQ_EINT14,  

  40.                 .end = IRQ_EINT14,  

  41.         .flags = IORESOURCE_IRQ,  

  42.     },  

  43.     [4] = {  

  44.         .start = IRQ_EINT15,  

  45.         .end = IRQ_EINT15,  

  46.         .flags = IORESOURCE_IRQ,  

  47.     },  

  48.     [5] = {  

  49.         .start = IRQ_EINT19,  

  50.         .end = IRQ_EINT19,  

  51.         .flags = IORESOURCE_IRQ,  

  52.     },  

  53. };  

  54.   

  55. struct platform_device *my_buttons_dev;  

  56.   

  57. static int __init platform_dev_init(void)  

  58. {  

  59.     int ret;  

  60.   

  61.     my_buttons_dev = platform_device_alloc("my_buttons", -1);  

  62.   

  63.     platform_device_add_resources(my_buttons_dev,key_resource,6);//添加资源一定要用该函数,不能使用对platform_device->resource幅值   

  64.                                                                 //否则会导致platform_device_unregister调用失败,内核异常。   

  65.   

  66.     ret = platform_device_add(my_buttons_dev);  

  67.   

  68.     if(ret)  

  69.         platform_device_put(my_buttons_dev);  

  70.   

  71.     return ret;  

  72. }  

  73.   

  74. static void __exit platform_dev_exit(void)  

  75. {  

  76.     platform_device_unregister(my_buttons_dev);  

  77. }  

  78.   

  79. module_init(platform_dev_init);  

  80. module_exit(platform_dev_exit);  

  81.   

  82. MODULE_AUTHOR("Z-YP");  

  83. MODULE_LICENSE("GPL");  

platfrom_derver.c:

  1. #include   

  2. #include   

  3. #include   

  4. #include   

  5. #include   

  6. #include   

  7. #include   

  8. #include   

  9. #include   

  10. #include   

  11. #include   

  12. #include   

  13. #include   

  14. #include   

  15. #include   

  16. #include   

  17. #include   

  18.  

  19. #define DEVICE_NAME     "my_buttons"   

  20.   

  21. struct button_irq_desc {  

  22.     int irq;  

  23.     int pin;  

  24.     int pin_setting;  

  25.     int number;  

  26.     char *name;   

  27. };  

  28.   

  29. static struct button_irq_desc button_irqs [] = {  

  30.     {IRQ_EINT8 , S3C2410_GPG(0) ,  S3C2410_GPG0_EINT8  , 0, "KEY0"},  

  31.     {IRQ_EINT11, S3C2410_GPG(3) ,  S3C2410_GPG3_EINT11 , 1, "KEY1"},  

  32.     {IRQ_EINT13, S3C2410_GPG(5) ,  S3C2410_GPG5_EINT13 , 2, "KEY2"},  

  33.     {IRQ_EINT14, S3C2410_GPG(6) ,  S3C2410_GPG6_EINT14 , 3, "KEY3"},  

  34.     {IRQ_EINT15, S3C2410_GPG(7) ,  S3C2410_GPG7_EINT15 , 4, "KEY4"},  

  35.     {IRQ_EINT19, S3C2410_GPG(11),  S3C2410_GPG11_EINT19, 5, "KEY5"},  

  36. };  

  37. static volatile char key_values [] = {'0', '0', '0', '0', '0', '0'};  

  38.   

  39. static DECLARE_WAIT_QUEUE_HEAD(button_waitq);  

  40.   

  41. static volatile int ev_press = 0;  

  42.   

  43.   

  44. static irqreturn_t buttons_interrupt(int irq, void *dev_id)  

  45. {  

  46.     struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id;  

  47.     int down;  

  48.   

  49.     // udelay(0);   

  50.     down = !s3c2410_gpio_getpin(button_irqs->pin);  

  51.   

  52.     if (down != (key_values[button_irqs->number] & 1)) { // Changed   

  53.   

  54.     key_values[button_irqs->number] = '0' + down;      

  55.         ev_press = 1;  

  56.         wake_up_interruptible(&button_waitq);  

  57.     }  

  58.       

  59.     return IRQ_RETVAL(IRQ_HANDLED);  

  60. }  

  61.   

  62.   

  63. static int s3c24xx_buttons_open(struct inode *inode, struct file *file)  

  64. {  

  65.     int i;  

  66.     int err = 0;  

  67.       

  68.     for (i = 0; i < sizeof(button_irqs)/sizeof(button_irqs[0]); i++) {  

  69.     if (button_irqs[i].irq < 0) {  

  70.         continue;  

  71.     }  

  72.         err = request_irq(button_irqs[i].irq, buttons_interrupt, IRQ_TYPE_EDGE_BOTH,   

  73.                           button_irqs[i].name, (void *)&button_irqs[i]);  

  74.         if (err)  

  75.             break;  

  76.     }  

  77.   

  78.     if (err) {  

  79.         i--;  

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>