📄 irq.c
字号:
/** linux/arch/armnommu/mach-s3c44b0/irq.c* 2002 tpu <tapu@371.net>*/#include <linux/init.h>#include <linux/sched.h>#include <linux/interrupt.h>#include <asm/hardware.h>#include <asm/irq.h>#include <asm/arch/irq.h>#include <asm/system.h>static int EINT4567_mask;void s3c44b0_mask_irq(unsigned int irq){ INT_DISABLE(irq);}void s3c44b0_unmask_irq(unsigned int irq){ INT_ENABLE(irq);}void s3c44b0_mask_ack_irq(unsigned int irq){ CLEAR_PEND_INT(irq); INT_DISABLE(irq);}void s3c44b0_mask_EINT4567_irq(unsigned int irq){ EINT4567_mask |= 1<<irq; if(EINT4567_mask == 0x78000000) INT_DISABLE(INT_EINT4567);}void s3c44b0_unmask_EINT4567_irq(unsigned int irq){ if(EINT4567_mask == 0x78000000) INT_ENABLE(INT_EINT4567); EINT4567_mask &= ~(1<<irq);}void s3c44b0_mask_ack_EINT4567_irq(unsigned int irq){ EXTINTPND |= 1<<(irq-INT_EINT4); EINT4567_mask |= 1<<irq; if(EINT4567_mask == 0x78000000) INT_DISABLE(INT_EINT4567);}static void s3c44b0_EINT4567_handler(int irq, void *dev_id, struct pt_regs *regs){ int i, EINT4567_pnd; EINT4567_pnd = EXTINTPND; EINT4567_pnd &= ~(EINT4567_mask>>27); printk("EINT4567_pnd = %08x\n", EINT4567_pnd); for(i=0; i<4; i++){ if(EINT4567_pnd&(1<<i)){ do_IRQ(i+INT_EINT4, regs); } }}static struct irqaction EINT4567_irq = { name: "EINT 4-7", handler: s3c44b0_EINT4567_handler, flags: SA_INTERRUPT};void irq_init_irq(void){ int irq; EINT4567_mask = 0x78000000; for (irq = 0; irq < 27; irq++) { irq_desc[irq].valid = 1; irq_desc[irq].probe_ok = 1; irq_desc[irq].mask_ack = s3c44b0_mask_ack_irq; irq_desc[irq].mask = s3c44b0_mask_irq; irq_desc[irq].unmask = s3c44b0_unmask_irq; } irq_desc[INT_GLOBAL].valid = 0; for (irq = 27; irq < 31; irq++) { irq_desc[irq].valid = 1; irq_desc[irq].probe_ok = 1; irq_desc[irq].mask_ack = s3c44b0_mask_ack_EINT4567_irq; irq_desc[irq].mask = s3c44b0_mask_EINT4567_irq; irq_desc[irq].unmask = s3c44b0_unmask_EINT4567_irq; } setup_arm_irq(INT_EINT4567, &EINT4567_irq); /* Mask all */ INTMSK = 0x03FFFFFF; /* Clear pending */ I_ISPC = 0x03FFFFFF; /* Enable IRQ request to CPU */ INTCON = 0x00000005; /* Select IRQ mode for all */ INTMOD = 0x00000000; INT_ENABLE(INT_GLOBAL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -