irq.c
来自「linux2.6驱动模块」· C语言 代码 · 共 76 行
C
76 行
#include <asm/irq.h>#include <asm/arch-s3c2410/irqs.h>#include "../inc/inc.h"extern MANAGER *Mg_p;static DECLARE_WAIT_QUEUE_HEAD(keys_waitq);static volatile int env_keys = 0;int Liid_keys_read(void *vptr, void *arg){ unsigned long err; int i; wait_event_interruptible(keys_waitq, env_keys); env_keys = 0; for(i = 0; i < 4 ; i ++){ printk("%x ", Mg_p->press_cnt[i]); } printk("\n");}irqreturn_t Liid_interrupts_hand(int irq, void *dev_id, struct pt_regs *regs){ volatile int *cnt = (volatile int *)dev_id; *cnt = *cnt + 1; switch(irq){ case IRQ_EINT0: printk("~"); break; case IRQ_EINT2: printk("!"); break; case IRQ_EINT11: printk("@"); break; case IRQ_EINT19: printk("#"); break; default: printk("|_|"); break; } env_keys = 1; wake_up_interruptible(&keys_waitq); //printk("keys--->%d:%#x \n", irq, *cnt); return 0;}int Liid_init_irq(void *vptr, void *arg){ int error, i; for(i = 0; i < 4; i++){ error = request_irq(Mg_p->key_irqs[i]->irq_num, Liid_interrupts_hand, Mg_p->key_irqs[i]->flags, Mg_p->key_irqs[i]->name, (void *)(&(Mg_p->press_cnt[i]))); if(error){ printk("request irq(%d) error:%d\r\n", i, error); break; } } if(error){ }}int Liid_rm_irq(void *vptr, void *arg){ int i; for(i = 0; i < 4; i++){ free_irq(Mg_p->key_irqs[i]->irq_num, (void *)(&(Mg_p->press_cnt[i]))); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?