`
mmdev
  • 浏览: 12932217 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

LDD3学习笔记(13):中断处理

 
阅读更多
#include<linux/interrupt.h>

intrequest_irq(unsignedintirq,irqreturn_t(*handler)(),unsignedlongflags,constchar*dev_name,void

*dev_id);

voidfree_irq(unsignedintirq,void*dev_id);

调用这个注册和注销一个中断处理.

#include<linux/irq.h.h>

intcan_request_irq(unsignedintirq,unsignedlongflags);

这个函数,i386x86_64体系上有,返回一个非零值如果一个分配给定中断线的企图成功.

#include<asm/signal.h>

SA_INTERRUPT

SA_SHIRQ

SA_SAMPLE_RANDOM

request_irq的标志.SA_INTERRUPT请求安装一个快速处理者(相反是一个慢速的).

SA_SHIRQ安装一个共享的处理者,并且第3flag声称中断时戳可用来产生系统熵.

/proc/interrupts

/proc/stat

报告硬件中断和安装的处理者的文件系统节点.

unsignedlongprobe_irq_on(void);

intprobe_irq_off(unsignedlong);

驱动使用的函数,当它不得不探测来决定哪个中断线被设备在使用.probe_irq_on的结果必

须传回给probe_irq_off在中断产生之后.probe_irq_off的返回值是被探测的中断号.

IRQ_NONE

IRQ_HANDLED

IRQ_RETVAL(intx)

从一个中断处理返回的可能值,指示是否一个来自设备的真正的中断出现了.

voiddisable_irq(intirq);

voiddisable_irq_nosync(intirq);

voidenable_irq(intirq);

驱动可以使能和禁止中断报告.如果硬件试图在中断禁止时产生一个中断,这个中断永远丢

失了.一个使用一个共享处理者的驱动必须不使用这个函数.

voidlocal_irq_save(unsignedlongflags);

voidlocal_irq_restore(unsignedlongflags);

使用local_irq_save来禁止本地处理器的中断并且记住它们之前的状态.flags可以被传递给

local_irq_restore来恢复之前的中断状态.

voidlocal_irq_disable(void);

voidlocal_irq_enable(void);

在当前处理器熵无条件禁止和使能中断的函数.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics