linux驱动之中断管理(for mini2440)

2440处理器的中断组织成两层:主中断 和 次中断,一共可以处理60个中断源。

主中断 和 次中断 经过中断构架的抽象之后,编写驱动程序时,我们不用考虑这两层中断,直接使用
request_irq 注册 60个中断源的某个,就可以直接使用中断了。

    err = request_irq(button_irqs[i].irq, buttons_interrupt, NULL,
                      button_irqs[i].name, (void *)&button_irqs[i]);
    set_irq_type(button_irqs[i].irq, IRQT_BOTHEDGE);

像上面这样使用中断。
下面是主中断0~31共32个中断源(32bit)

irqs.h头文件中定义了中断号

/* linux/arch/arm/mach-s3c24a0/include/mach/irqs.h
 *
 * Copyright (c) 2003-2005 Simtec Electronics
 *   Ben Dooks <ben@simtec.co.uk>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/


#ifndef __ASM_ARCH_24A0_IRQS_H
#define __ASM_ARCH_24A0_IRQS_H __FILE__

#define IRQ_EINT0t2	S3C2410_IRQ(0)	/* 16 */
/* for generic entry-macro.S */
#define IRQ_EINT0	IRQ_EINT0t2

#define IRQ_EINT3t6	S3C2410_IRQ(1)
#define IRQ_EINT7t10	S3C2410_IRQ(2)
#define IRQ_EINT11t14	S3C2410_IRQ(3)
#define IRQ_EINT15t18	S3C2410_IRQ(4)	/* 20 */
#define IRQ_TICK	S3C2410_IRQ(5)
#define IRQ_DCTQ	S3C2410_IRQ(6)
#define IRQ_MC		S3C2410_IRQ(7)
#define IRQ_ME		S3C2410_IRQ(8)	/* 24 */
#define IRQ_KEYPAD	S3C2410_IRQ(9)
#define IRQ_TIMER0	S3C2410_IRQ(10)
#define IRQ_TIMER1	S3C2410_IRQ(11)
#define IRQ_TIMER2	S3C2410_IRQ(12)
#define IRQ_TIMER3_4	S3C2410_IRQ(13)
#define IRQ_OS_TIMER	IRQ_TIMER3_4
#define IRQ_LCD		S3C2410_IRQ(14)
#define IRQ_CAM_C	S3C2410_IRQ(15)
#define IRQ_WDT_BATFLT	S3C2410_IRQ(16)	/* 32 */
#define IRQ_UART0	S3C2410_IRQ(17)
#define IRQ_CAM_P	S3C2410_IRQ(18)
#define IRQ_MODEM	S3C2410_IRQ(19)
#define IRQ_DMA		S3C2410_IRQ(20)
#define IRQ_SDI		S3C2410_IRQ(21)
#define IRQ_SPI0	S3C2410_IRQ(22)
#define IRQ_UART1	S3C2410_IRQ(23)
#define IRQ_AC97_NFLASH	S3C2410_IRQ(24)	/* 40 */
#define IRQ_USBD	S3C2410_IRQ(25)
#define IRQ_USBH	S3C2410_IRQ(26)
#define IRQ_IIC		S3C2410_IRQ(27)
#define IRQ_IRDA_MSTICK	S3C2410_IRQ(28)	/* 44 */
#define IRQ_VLX_SPI1	S3C2410_IRQ(29)
#define IRQ_RTC		S3C2410_IRQ(30)	/* 46 */
#define IRQ_ADC_PEN     S3C2410_IRQ(31)

/* interrupts generated from the external interrupts sources */
#define IRQ_EINT00	S3C2410_IRQ(32)	/* 48 */
#define IRQ_EINT1	S3C2410_IRQ(33)
#define IRQ_EINT2	S3C2410_IRQ(34)
#define IRQ_EINT3	S3C2410_IRQ(35)
#define IRQ_EINT4	S3C2410_IRQ(36)
#define IRQ_EINT5	S3C2410_IRQ(37)
#define IRQ_EINT6	S3C2410_IRQ(38)
#define IRQ_EINT7	S3C2410_IRQ(39)
#define IRQ_EINT8	S3C2410_IRQ(40)
#define IRQ_EINT9	S3C2410_IRQ(41)
#define IRQ_EINT10	S3C2410_IRQ(42)
#define IRQ_EINT11	S3C2410_IRQ(43)
#define IRQ_EINT12	S3C2410_IRQ(44)
#define IRQ_EINT13	S3C2410_IRQ(45)
#define IRQ_EINT14	S3C2410_IRQ(46)
#define IRQ_EINT15	S3C2410_IRQ(47)
#define IRQ_EINT16	S3C2410_IRQ(48)
#define IRQ_EINT17	S3C2410_IRQ(49)
#define IRQ_EINT18	S3C2410_IRQ(50)

#define IRQ_EINT_BIT(x) ((x) - IRQ_EINT00)

/* SUB IRQS */
#define IRQ_S3CUART_RX0		S3C2410_IRQ(51)	/* 67 */
#define IRQ_S3CUART_TX0		S3C2410_IRQ(52)
#define IRQ_S3CUART_ERR0	S3C2410_IRQ(53)

#define IRQ_S3CUART_RX1		S3C2410_IRQ(54)
#define IRQ_S3CUART_TX1		S3C2410_IRQ(55)
#define IRQ_S3CUART_ERR1	S3C2410_IRQ(56)

#define IRQ_S3CUART_RX2		(0x0)
#define IRQ_S3CUART_TX2		(0x0)
#define IRQ_S3CUART_ERR2	(0x0)


#define IRQ_IRDA	S3C2410_IRQ(57)
#define IRQ_MSTICK	S3C2410_IRQ(58)
#define IRQ_RESERVED0	S3C2410_IRQ(59)
#define IRQ_RESERVED1	S3C2410_IRQ(60)
#define IRQ_RESERVED2	S3C2410_IRQ(61)
#define IRQ_TIMER3	S3C2410_IRQ(62)
#define IRQ_TIMER4	S3C2410_IRQ(63)
#define IRQ_WDT		S3C2410_IRQ(64)
#define IRQ_BATFLT	S3C2410_IRQ(65)
#define IRQ_POST	S3C2410_IRQ(66)
#define IRQ_DISP_FIFO	S3C2410_IRQ(67)
#define IRQ_PENUP	S3C2410_IRQ(68)
#define IRQ_PENDN	S3C2410_IRQ(69)
#define IRQ_ADC		S3C2410_IRQ(70)
#define IRQ_DISP_FRAME	S3C2410_IRQ(71)
#define IRQ_NFLASH	S3C2410_IRQ(72)
#define IRQ_AC97	S3C2410_IRQ(73)
#define IRQ_SPI1	S3C2410_IRQ(74)
#define IRQ_VLX		S3C2410_IRQ(75)
#define IRQ_DMA0	S3C2410_IRQ(76)
#define IRQ_DMA1	S3C2410_IRQ(77)
#define IRQ_DMA2	S3C2410_IRQ(78)
#define IRQ_DMA3	S3C2410_IRQ(79)

#define IRQ_TC		(0x0)

#define NR_IRQS		(IRQ_DMA3+1)

#endif /* __ASM_ARCH_24A0_IRQS_H */
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yfw&武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值