Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336382
  • 博文数量: 67
  • 博客积分: 2485
  • 博客等级: 大尉
  • 技术积分: 665
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 17:29
文章分类

全部博文(67)

文章存档

2016年(3)

2013年(5)

2012年(3)

2011年(5)

2010年(35)

2009年(16)

我的朋友

分类: LINUX

2010-04-28 14:57:54

 
这是驱动程序申请中断和释放中断的调用。在include/linux/sched.h里声明。
request_irq()调用的定义:
int request_irq(unsigned int irq,
void (*handler)(int irq, void *dev_id, struct pt_regs *regs
),
unsigned long irqflags,
const char * devname,
void *dev_id);
irq是要申请的硬件中断号。在Intel平台,范围0--15。handler是向系统登记的中断处理函数。这是一个回调函数,中断发生时,系统调用这个函数,传入的参数包括硬件中断号,device id,寄存器值。dev_id就是下面的request_irq时传递给系统的参数dev_id。irqflags是中断处理的一些属性。比较重要的有SA_INTERRUPT,

标明中断处理程序是快速处理程序(设置SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT)。快速处理程序被调用时屏蔽所有中断。慢速处理程序不屏蔽。还有一个SA_SHIRQ属性,设置了以后运行多个设备共享中断。dev_id在中断共享时会用到。一般设置为这个设备的 device结构本身或者NULL。中断处理程序可以用dev_id找到相应的控制这个中断的设备,或者用irq2dev_map找到中断对应的设备。
void free_irq(unsigned int irq,void *dev_id); 
阅读(1730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~