linux驅動編寫之中斷處理
阿新 • • 發佈:2017-05-20
類型 div 應該 urn 處理方式 com pre turn 申請
一、中斷
1、概念
學過單片機的應該非常清楚中斷的概念,也就是CPU在正常執行程序過程中,出現了突發事件(中斷事件),於是CPU暫停當前程序的執行,轉去處理突發事件。處理完畢後,CPU又返回被中斷的程序位置繼續執行。
2、處理流程
單片機的中斷處理程序相對簡單,包含中斷源的配置和中斷服務程序的編寫。中斷源配置包含中斷源類型、觸發方式、優先級等內容;中斷服務程序包含服務歷程、中斷標誌位清楚等內容。
linux中斷程序,以特有的操作系統linux為基本平臺,實現了其特有的中斷程序處理方式,為開發者也提供了一套開發流程。但是,無論系統怎麽封裝,這套流程與單片機的中斷處理流程差別不大,主要包含中斷源的配置和中斷服務程序的編寫。涉及到的主要函數有:
request_irq() 申請中斷
free_irq() 釋放中斷
irq_interrupt() 中斷服務
二、中斷編程
1、申請中斷
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *name, void *dev_id)
- irq 申請的硬件中斷號
- handler 中斷處理函數,回調函數
- irqflags 觸發方式、工作方式
- name 中斷名稱,在cat /proc/interrupts中可以看到此名稱
- dev_id 一般設置為這個設備的設備結構體或者NULL
2、釋放中斷
void free_irq(unsigned int irq, void *dev_id)
3、中斷服務
typedef irqreturn_t (*irq_handler_t)(int, void *);
中斷服務程序,輸入參數有兩個,分別是中斷號irq和dev_id,返回參數類型irqreturn_t。
參考博客: Linux設備驅動中斷機制
linux驅動編寫之中斷處理