5.中斷管理

設備驅動程序通過調用request_irq函數來申請中斷,通過free_irq來釋放中斷。它們在linux/sched.h中的定義如下:

int request_irq(

unsigned int irq,

void (*handler)(int irq,void dev_id,structpt_regs *regs),

unsigned long flags,

const char *device,

void *dev_id

);

void free_irq(unsigned int irq, void*dev_id);

通常從request_irq函數返回的值爲0時,表示申請成功;負值表示出現錯誤。

— irq表示所要申請的硬件中斷號。

— handler爲向系統登記的中斷處理子程序,中斷產生時由系統來調用,調用時所帶參數irq爲中斷號,dev_id爲申請時告訴系統的設備標識,regs爲中斷髮生時寄存器內容。

— device爲設備名,將會出現在/proc/interrupts文件裏。

— flag是申請時的選項,它決定中斷處理程序的一些特性,其中最重要的是決定中斷處理程序是快速處理程序(flag裏設置了SA_INTERRUPT)還是慢速處理程序(不設置SA_INTERRUPT)。

下面的代碼將在SBC-2410X的Linux中註冊外部中斷2。

eint_irq = IRQ_EINT2;

set_external_irq (eint_irq, EXT_FALLING_EDGE,GPIO_PULLUP_DIS);

ret_val =request_irq(eint_irq,eint2_handler, “S3C2410Xeint2”,0);

if(ret_val < 0){

return ret_val;

}

用來打開和關閉中斷的函數如下:

#define cli() _asm_ _volatile_("cli"::)

#define sli() _asm_ _volatile_("sli"::) 。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章