内部中断定义在/arch/arm/plat-omap/include/mach/irqs.h中,如:#define INT_34XX_BENCH_MPU_EMUL 3#define INT_34XX_ST_MCBSP2_IRQ 4#define INT_34XX_ST_MCBSP3_IRQ 5#define INT_34XX_SSM_ABORT_IRQ 6#define INT_34XX_SYS_NIRQ 7#define INT_34XX_D2D_FW_IRQ 8#define INT_34XX_PRCM_MPU_IRQ 11#define INT_34XX_MCBSP1_IRQ 16#define INT_34XX_MCBSP2_IRQ 17#define INT_34XX_MCBSP3_IRQ 22#define INT_34XX_MCBSP4_IRQ 23#define INT_34XX_CAM_IRQ 24#define INT_34XX_MCBSP5_IRQ 27#define INT_34XX_GPIO_BANK1 29#define INT_34XX_GPIO_BANK2 30#define INT_34XX_GPIO_BANK3 31#define INT_34XX_GPIO_BANK4 32#define INT_34XX_GPIO_BANK5 33#define INT_34XX_GPIO_BANK6 34#define INT_34XX_USIM_IRQ 35#define INT_34XX_WDT3_IRQ 36#define INT_34XX_SPI4_IRQ 48#define INT_34XX_SHA1MD52_IRQ 49#define INT_34XX_FPKA_READY_IRQ 50#define INT_34XX_SHA1MD51_IRQ 51#define INT_34XX_RNG_IRQ 52#define INT_34XX_I2C3_IRQ 61#define INT_34XX_FPKA_ERROR_IRQ 64如果要用GPIO作为中断呢?先看arch/arm/plat-omap/include/mach/gpio.h文件:#define OMAP_GPIO_IRQ(nr) (OMAP_GPIO_IS_MPUIO(nr) ? /IH_MPUIO_BASE + ((nr) & 0x0f) : /IH_GPIO_BASE + (nr))用法举例:假定使用GP14作为中断输入,则可以使用如下代码得到IRQ号:OMAP_GPIO_IRQ(14);同时,文件需要包含<mach/gpio.h>文件。使用一个GPIO作为中断之前,需进行请求,同时还需要设置方向,参考arch/arm/plat-omap/debug-devices.c文件中的使用范例:smc91x_resources[1].start = gpio_to_irq(gpio);smc91x_resources[1].end = gpio_to_irq(gpio);status = gpio_request(gpio, "SMC91x irq");if (status < 0) {printk(KERN_ERR "GPIO%d unavailable for smc91x IRQ/n", gpio);return status;}gpio_direction_input(gpio);一个简单的能触发中断的范例:先需要在mux.c和mux.h中设置GPIO156:增加:MUX_CFG_34XX("GPIO156", 0x18c,OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP) /* for GPIO156 */增加:GPIO156,初始化: //for test JP9 GP156omap_cfg_reg(GPIO156); // gpio_request(156, "JP9 Reset_Reg"); gpio_direction_input(156); set_irq_type(OMAP_GPIO_IRQ(156), IRQ_TYPE_LEVEL_LOW); enable_irq(gpio_to_irq(156));申请中断:request_irq (OMAP_GPIO_IRQ(156), &test_interrupt, 0, "REG_REST", NULL);中断处理函数:static irqreturn_t test_interrupt (int irq, void *dev_id, struct pt_regs * regs)^M{ printk("#########ABING in INTR/n"); return 0;}只要给GPIO156一个低电平,即可出发中断。