首页 > 代码库 > 03day01irq

03day01irq

 1 #include <linux/module.h> 2 #include <linux/init.h> 3 #include <linux/kernel.h> 4  5 #include <linux/interrupt.h> //request_irq   注册中断 6 #include <mach/irqs.h>  7 /* 8 对于中断号,它是和芯片相关,  头文件是在linux-3.5/arch/arm/mach-exynos/include/mach   中 9 该头文件又包含了  plat/irqs.h   该文件中有IRQ_EINT()   可以算出外部中断号10 */11 12 /*13 按键产生中断14 /sysfs  /proc   这两个目录都是虚拟文件系统,这种文件系统存在内存中15 在/proc/interrupts  文件可以查看   中断的注册信息 16 */17 //中断处理函数  irqno  中断号,   data18 irqreturn_t key_hankler(int  irqno, void * data)19 {20     printk("hello world\n");21     printk("data = http://www.mamicode.com/%d/n", (int)data);22 23     return  IRQ_HANDLED;24 }25 26 27 static int test_init(void)28 {29     int  ret = 0;30     printk("%s:%d\n", __FILE__, __LINE__);31 32     //注册  按键中断33     //XEINT26  ~29 34 /*35 static inline int __must_check36 request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,37         const char *name, void *dev)38 39 irq   中断号   4412 平台   40 #define IRQ_EINT(x)   41 IRQ_EINT(26)42 43 typedef irqreturn_t (*irq_handler_t)(int, void *);44 中断 服务函数45 46 flags  中断的标志  中断触发的形式  IRQF_TRIGGER_FALLING47 48 name  名称  注册成功之后,可以在/proc/interrupts  看到49 50 dev   向中断服务函数,传递的参数,如果不需要传递,可以赋值为NULL51 52 */53     ret = request_irq(IRQ_EINT(26), key_hankler, IRQF_TRIGGER_FALLING, 54         "candle_test",   (void *)123);55     if(ret < 0) {56         printk("request_irq  failed\n");57         goto  err_request_irq;58     }59 60 61     return 0;62 err_request_irq:63     return -1;64 }65 66 67 static void test_exit(void)68 {69     printk("%s:%d\n", __FILE__, __LINE__);70     //释放中断号71     free_irq(IRQ_EINT(26), (void *)123);72 }73 74 75 module_init(test_init);76 module_exit(test_exit);77 78 MODULE_LICENSE("GPL");

 

03day01irq