您的位置:首页 > 运维架构 > Linux

设备驱动(八)

2014-02-18 09:47 106 查看
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  在共享中断中,非当前设备发生中

中断函数要求

中断嵌套处于关闭状态,所以中断函数执行时间尽可能短
严禁睡眠
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息