1. 程式人生 > >linux驅動編寫之中斷處理

linux驅動編寫之中斷處理

類型 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驅動編寫之中斷處理