⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.c

📁 microwindows移植到S3C44B0的源码
💻 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 + -