2015年5月27日 星期三

[Android]Linux kernel 開發基礎 (六)- Interrupt

系統運作,有時要停下處理event,
這時候,可利用interrupt中斷去處理event之後再繼續運作,
尤其是輸入裝置通知有資料要送給系統時候,interrupt是一個好方法.

1.設定interrupt pin,以及觸發條件(
IRQF_TRIGGER_RISING ,    上升緣觸發
IRQF_TRIGGER_FALLING ,下降緣觸發
IRQF_TRIGGER_HIGH,         高準位觸發
IRQF_TRIGGER_LOW           低準位觸發)

  hello_irq_gpio = gpio_to_irq(/*put the interrupt pin here .*/);
    ret = request_threaded_irq(hello_irq_gpio, NULL, hello_interrupt,
IRQF_TRIGGER_RISING | IRQF_ONESHOT,
"hello", hello_data);
if (ret < 0) {
printk("[hello.c]Failed to register interrupt\n");
}

2.設定觸發條件之後的處理:
static irqreturn_t hello_interrupt(int irq, void *dev_id)
{
printk("interrupt enter and define the behavior here \n");

return IRQ_HANDLED;
}


範例程式下載

沒有留言: