/* clear the irq */
pdata->ack_irq();
schedule_work(&pdata->work);
return irq_handled;
}static void micco_worker(struct work_struct *work)
if (val & micco_eb_otgcp_iover)
ret |= pmic_event_otgcp_iover;
micco_read(micco_event_c, &val);
if (val & micco_ec_pen_down)
ret |= pmic_event_touch;
micco_read(micco_event_d, &val);
if (val & micco_ed_headset)
if (val & micco_ed_hookswitch)
return ret;
}int pmic_event_handle(unsigned long event)
spin_unlock_irqrestore(&pxa3xx_pmic_ops->cb_lock, flags);
return 0;
}export_symbol(pmic_event_handle);
比如觸控螢幕的處理,
da9034註冊的時候呼叫micco_probe函式將da9034的中斷處理函式註冊
ret = request_irq(client->irq, micco_irq_handler, irqf_trigger_falling,
"micco", client);
觸控螢幕在註冊時將觸控螢幕的事件和觸控螢幕中斷處理程式註冊,通過下面語句註冊
ret = pmic_callback_register(pmic_event_touch, micco_ts_interrupt);
當發生觸控螢幕中斷時呼叫 micco_irq_handler,接著呼叫micco_worker, event = micco_event_change();
讀出產生中斷的事件,呼叫 pmic_event_handle(event);對相應的事件進行處理。
da9034產生中斷後要通過讀出事件暫存器的值,才能清除中斷,否則中斷線不響應後面的中斷。
linux2 6 32中斷處理流程
1 當發生中斷時,pc指標通過異常向量表跳轉到中斷入口函式asm do irq asm do irq是中斷的c語言總入口函式,它在 arch arm kernel irq.c中定義,宣告如下 asmlinkage void exception asm do irq unsigned int irq,...
ARMv8 中斷處理介面
不考慮el2和el3,irq處理分兩種情況 使用者態發生的中斷和核心態發生的中斷,相應的中斷處理介面分別為 el1 irq el0 irq 以核心態el1發生的irq為例 358 align 6 359 el1 irq 360 kernel entry 1 壓棧,儲存上下文 361 enable d...
x86中斷(一) 中斷分類
一 中斷分類 x86系統支援256個中斷源,每個中斷源使用0 255數字標識,該標識稱作中斷向量號 即cpu中斷源的中斷號,要與外部中斷的中斷號irq n相區別 cpu通過獲取中斷向量號識別中斷源。256個中斷源可以分為 其中 1 內部中斷 由cpu內部事件及執行軟中斷指令產生,由除法中斷 溢位中斷...