发出中断时不会调用中断处理程序

时间:2013-04-12 03:31:10

标签: c linux

我正在为在ARM上运行的设备编写驱动程序。

这是probe()和interrupt_handler()的代码:

static irqreturn_t interrupt_handler(int irq, void *dev_id){
    printk(KERN_ALERT "MY_IRQ: Interrupt handler executed!\n");
    return IRQ_HANDLED;
}

static int mydevice_probe (struct platform_device *pdev) {
    printk("-----------------------------------------PROBE CALLED \n");
    r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
    if(r == NULL) {
        printk("platform_get_resource failed\n");
        return -ENODEV;
    }
    irq = platform_get_irq(pdev,0);
    if (irq < 0) {
        printk("platform_get_irq failed\n");
        return -ENODEV;
    }

    ret = request_irq(irq, interrupt_handler, IRQF_SHARED, pdev->name, &dev_num);
    ret = misc_register(&mydevice_miscdevice);
    return 0;
}

request_irq成功返回0并且IRQ#17被分配给驱动程序。 问题是,当发出中断时,中断处理程序不会被执行。

有什么想法吗?我错过了什么?

很多,非常感谢!

1 个答案:

答案 0 :(得分:2)

首先,良好做法问题 - 对request_irqmisc_register的调用应受ifprintk失败的return -EIO条款的保护。

也许您没有启用中断。您可能应该添加代码以清除,然后在调用request_irq后启用中断。