Mini6410 实现简单按键中断驱动


简单按键中断驱动,在mini6410开发板上运行良好。

仅供技术交流,请勿商用

  1. #include <linux/fs.h>   
  2. #include <linux/init.h>   
  3. #include <linux/module.h>   
  4. #include <linux/kernel.h>   
  5. #include <linux/irq.h>   
  6. #include <asm/irq.h>   
  7. #include <asm/io.h>   
  8. #include <linux/interrupt.h>   
  9. #include <linux/miscdevice.h>   
  10. #include <linux/cdev.h>   
  11. #include <asm/uaccess.h>   
  12. #include <mach/hardware.h>   
  13. #include <linux/platform_device.h>   
  14. #include <mach/regs-gpio.h>   
  15. #include <mach/gpio-bank-n.h>   
  16. #include <plat/gpio-cfg.h>   
  17.   
  18. #define DEVICE_NAME "button_irq"   
  19.   
  20. static int button_irq_open(struct inode *inode,struct file *filp)  
  21. {  
  22.     return 0;  
  23. }  
  24. static int button_irq_release(struct inode *inode,struct file *filp)  
  25. {  
  26.     return 0;  
  27. }  
  28. static irqreturn_t  button_irq_inter(int nr,void *devid)  
  29. {  
  30.     static int count=0;  
  31.     count ++;  
  32.     printk("%d\n",count);  
  33.     return IRQ_RETVAL(IRQ_HANDLED);  
  34. }  
  35. static int button_irq_init()  
  36. {  
  37.     unsigned int ret;  
  38.     ret = request_irq(IRQ_EINT(0),button_irq_inter,IRQ_TYPE_EDGE_BOTH,"KEY0",NULL);  
  39.     return 0;  
  40. }  
  41. static struct file_operations dev_fops =  
  42. {  
  43.     .owner = THIS_MODULE,  
  44.     .open = button_irq_open,  
  45.     .release = button_irq_release,  
  46.   
  47. };  
  48. static struct miscdevice misc =  
  49. {  
  50.     .minor = MISC_DYNAMIC_MINOR,  
  51.     .name = DEVICE_NAME,  
  52.     .fops = &dev_fops,  
  53. };  
  54. static int __init dev_init()  
  55. {  
  56.     int ret;  
  57.     ret = misc_register(&misc);  
  58.     printk("button_irq errno\n");  
  59.     button_irq_init();  
  60.     return 0;  
  61. }  
  62. static void __exit dev_exit()  
  63. {  
  64.     misc_deregister(&misc);  
  65.     free_irq(IRQ_EINT(0),NULL);  
  66. }  
  67.   
  68. module_init(dev_init);  
  69. module_exit(dev_exit);  
  70.   
  71. MODULE_LICENSE("GPL");  
  72. MODULE_AUTHOR("MUGE0913");  

相关内容