2015年3月20日 星期五

使用request_irq request_threaded_irq 註冊ISR

http://blog.csdn.net/gx19862005/article/details/18740705

http://blog.chinaunix.net/uid-21977330-id-3755609.html

request_threaded_irq() 是Linux kernel 2.6.30之後新加的irq handler API

handler將不是在interrupt context裡執行;而是在新增的thread中執行,如此可以確保不被綁架,擁有所有workqueue的特性,卻省去了創建、初始化、調度workqueue等多個步驟。

支援threaded interrupt handler

int request_threaded_irq(unsigned int irq, irq_handler_t handler, irq_handler_t thread_fn, unsigned long irqflags, const char *devname, void *dev_id)

irq是中斷號
handler是在發生中斷時,首先要執行的動作,類似舊機制中的top half 
最後可return IRQ_WAKE_THREAD來喚醒中斷線程,或return IRQ_HANDLE而不執行中斷線程
thread_fn是要在線程中執行的動作,類似舊機制中的bottom half
irqsflasg多了一個IRQF_ONESHOT,用來指示在中斷線程執行完之後再打開該中斷


沒有留言:

張貼留言