guningyi
驱动牛犊
驱动牛犊
  • 注册日期2009-11-09
  • 最后登录2009-12-08
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1978回复:1

【求助】关于linux下中断的问题

楼主#
更多 发布于:2009-11-23 12:32
我看到在驱动程序的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函数呢?是不是没有显示的调用??
我就想知道它在哪以及如何被调用的。
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
沙发#
发布于:2009-11-23 19:47
函数放到中断向量表中,从向量表中调用
走走看看开源好 Solaris vs Linux
游客

返回顶部