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

📄 irq_test.c

📁 Linux device driver sample code
💻 C
字号:
#include <linux/interrupt.h>#include <linux/module.h>#include <asm/hardware.h>#include <asm/irq.h>#include <asm/mach/irq.h>void do_irq30_tasklet(unsigned long param){	printk(KERN_INFO "IRQ30 Tasklet \n");}DECLARE_TASKLET(irq30_tasklet, do_irq30_tasklet, 0);int aic_set_type(unsigned irq, unsigned type){    unsigned int smr, srctype;    switch (type) {    case IRQT_HIGH:        srctype = AT91_AIC_SRCTYPE_HIGH;        break;    case IRQT_RISING:        srctype = AT91_AIC_SRCTYPE_RISING;        break;#if 0    case IRQT_LOW:        if ((irq == AT91_ID_FIQ) || is_extern_irq(irq))     /* only supported on external interrupts */            srctype = AT91_AIC_SRCTYPE_LOW;        else            return -EINVAL;        break;    case IRQT_FALLING:        if ((irq == AT91_ID_FIQ) || is_extern_irq(irq))     /* only supported on external interrupts */            srctype = AT91_AIC_SRCTYPE_FALLING;        else            return -EINVAL;        break;#endif    default:        return -EINVAL;    }    smr = at91_sys_read(AT91_AIC_SMR(irq)) & ~AT91_AIC_SRCTYPE;    at91_sys_write(AT91_AIC_SMR(irq), smr | srctype);    return 0;}irqreturn_t myIRQ(int irq, void *devid){	printk(KERN_INFO "IRQ test");	tasklet_schedule(&irq30_tasklet);	return IRQ_HANDLED;}int init_module(void){	int ret;		aic_set_type(30, IRQT_RISING);	ret = request_irq(30, myIRQ, 0, "MYIRQ", 0);		return 0;	}void cleanup_module(void){	free_irq(30, 0);}/* * 	*PIOC_BSR = *PIOC_BSR | 0x00008000;  //Enable IRQ functionality * 	*PIOC_PDR = *PIOC_PDR | 0x00008000;  //Disable GPIO functionality. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -