设备驱动(八)

Linux中断机制
中断子系统
  • 对所有的中断源进行编号(中断号) 位置:linux-3.2/arch/arm/mach-s5pv210/include/mach/irqs.h
  • 判断中断源,执行相应的ISR
IRQ_EINT(n)获取外部中断源中断号
内核中存在中断描述表
struct irq_desc irqdesc[];

注册中断
static inline int __must_check
request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
            const char *name, void *dev)
irqno:中断号
handler: 中断处理函数
flags: 中断标志位  <linux/interrupt.h> 
IRQF_DISABLED 不允许中断嵌套
IRQF_SHARED 是否是共享中断
IRQF_TRIGGER_LOW 低电平触发方式
只有外部中断源需要指定触发方式
name 设备名 /proc/interrupts
dev_id 传递给handler的参数, (独占:NULL,共享中断:设备结构体地址)
中断释放
void free_irq(int irqno, void *dev)
dev要与注册时的dev相同
中断处理函数ISR
irqreturn_t handler(int irqno, void *dev)
返回值
IRQ_HANDLED 中断函数已经处理
IRQ_NONE  在共享中断中,非当前设备发生中

中断函数要求
中断嵌套处于关闭状态,所以中断函数执行时间尽可能短
严禁睡眠



你可能感兴趣的:(linux,设备驱动,中断系统)