2013-04-12 57 views
1

我正在爲在ARM上運行的設備編寫驅動程序。發出中斷時不會調用中斷處理程序

下面是探針())的代碼和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被分配給駕駛員。 問題是,發出中斷時,中斷處理程序不會執行。

有什麼想法?我錯過了什麼?

很多,非常感謝!

回答

2

首先,良好做法的問題 - 調用request_irqmisc_registerif條款,printkreturn -EIO失敗保護。

也許你沒有啓用中斷。您應該添加代碼來清除,然後在致電request_irq後啓用中斷。

+0

我剛剛發現了一秒之前。 是的,因爲我沒有正確啓用中斷。 現在它工作正常。 謝謝。 –