阅读:1978回复:1
【求助】关于linux下中断的问题
我看到在驱动程序的open()中有注册中断
比如说一个I2C总线驱动: #ifndef __ASM_ARCH_IRQS_H__ #define __ASM_ARCH_IRQS_H__ #define NR_IRQS 32 #define VSLID_IRQ(i) ( i>=0 && i<NR_IRQS) ..... #define IRQ_I2C 9 ....... static int i2c_open(struct inode *inode, struct file *filp) { unsigned long flag; unsigned int num; u32 temp; num = MINOR(inode->i_rdev); if (usge == 0) { request_irq(IRQ_I2C, i2c_irq_handle, SA_INTERRUPT, "my DEVICE_NAME", NULL); /* 注册中断服务程序*/ ...... } ....... } 那么这个中断服务程序什么时候被调用呢? 有人说当中断发生的时候, 比如外设有中断请求,经过中断控制器之后,将这个中断转换成中断向量,并放在中断控制器的I/O端口上, CPU读到这个向量,产生一个中断。 那么在什么地方调用这个i2c_irq_handle函数呢?是不是没有显示的调用?? 我就想知道它在哪以及如何被调用的。 |
|
沙发#
发布于:2009-11-23 19:47
函数放到中断向量表中,从向量表中调用
|
|
|