加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 11.5  中斷編程
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)之:中斷編程

2013/09/13
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

11.5  中斷編程

前面所講述的驅(qū)動(dòng)程序中都沒(méi)有涉及中斷處理,而實(shí)際上,有很多Linux的驅(qū)動(dòng)都是通過(guò)中斷的方式來(lái)進(jìn)行內(nèi)核和硬件的交互。中斷機(jī)制提供了硬件和軟件之間異步傳遞信息的方式。硬件設(shè)備在發(fā)生某個(gè)事件時(shí)通過(guò)中斷通知軟件進(jìn)行處理。中斷實(shí)現(xiàn)了硬件設(shè)備按需獲得處理器關(guān)注的機(jī)制,與查詢方式相比可以大大節(jié)省CPU資源的開(kāi)銷。

在此將介紹在驅(qū)動(dòng)程序中用于申請(qǐng)中斷的request_irq()調(diào)用,和用于釋放中斷的free_irq()調(diào)用。request_irq()函數(shù)調(diào)用的格式如下所示:

int request_irq(unsigned int irq,

            void (*handler)(int irq, void *dev_id, struct pt_regs *regs),

            unsigned long irqflags, const char * devname, oid *dev_id);

其中irq是要申請(qǐng)的硬件中斷號(hào)。在Intel平臺(tái),范圍是0~15。

參數(shù)handler為將要向系統(tǒng)注冊(cè)的中斷處理函數(shù)。這是一個(gè)回調(diào)函數(shù),中斷發(fā)生時(shí),系統(tǒng)調(diào)用這個(gè)函數(shù),傳入的參數(shù)包括硬件中斷號(hào)、設(shè)備id以及寄存器值。設(shè)備id就是在調(diào)用request_irq()時(shí)傳遞給系統(tǒng)的參數(shù)dev_id。

參數(shù)irqflags是中斷處理的一些屬性,其中比較重要的有SA_INTERRUPT。這個(gè)參數(shù)用于標(biāo)明中斷處理程序是快速處理程序(設(shè)置SA_INTERRUPT)還是慢速處理程序(不設(shè)置SA_INTERRUPT)??焖偬幚沓绦虮徽{(diào)用時(shí)屏蔽所有中斷。慢速處理程序只屏蔽正在處理的中斷。還有一個(gè)SA_SHIRQ屬性,設(shè)置了以后運(yùn)行多個(gè)設(shè)備共享中斷,在中斷處理程序中根據(jù)dev_id區(qū)分不同設(shè)備產(chǎn)生的中斷。

參數(shù)devname為設(shè)備名,會(huì)在/dev/interrupts中顯示。

參數(shù)dev_id在中斷共享時(shí)會(huì)用到。一般設(shè)置為這個(gè)設(shè)備的device結(jié)構(gòu)本身或者NULL。中斷處理程序可以用dev_id找到相應(yīng)的控制這個(gè)中斷的設(shè)備,或者用irq2dev_map()找到中斷對(duì)應(yīng)的設(shè)備。

釋放中斷的free_irq()函數(shù)調(diào)用的格式如下所示。該函數(shù)的參數(shù)與request_irq()相同。

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

華清遠(yuǎn)見(jiàn)(www.farsight.com.cn)是國(guó)內(nèi)領(lǐng)先嵌入師培訓(xùn)機(jī)構(gòu),2004年注冊(cè)于中國(guó)北京海淀高科技園區(qū),除北京總部外,上海、深圳、成都、南京、武漢、西安、廣州均有直營(yíng)分公司。華清遠(yuǎn)見(jiàn)除提供嵌入式相關(guān)的長(zhǎng)期就業(yè)培訓(xùn)、短期高端培訓(xùn)、師資培訓(xùn)及企業(yè)員工內(nèi)訓(xùn)等業(yè)務(wù)外,其下屬研發(fā)中心還負(fù)責(zé)嵌入式、Android及物聯(lián)網(wǎng)方向的教學(xué)實(shí)驗(yàn)平臺(tái)的研發(fā)及培訓(xùn)教材的出版,截止目前為止已公開(kāi)出版70余本嵌入式/移動(dòng)開(kāi)發(fā)/物聯(lián)網(wǎng)相關(guān)圖書(shū)。企業(yè)理念:專業(yè)始于專注 卓識(shí)源于遠(yuǎn)見(jiàn)。企業(yè)價(jià)值觀:做良心教育、做專業(yè)教育,更要做受人尊敬的職業(yè)教育。