新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 嵌入式Linux設備驅動開發(fā)之:中斷編程

        嵌入式Linux設備驅動開發(fā)之:中斷編程

        作者: 時間:2013-09-13 來源:網絡 收藏

        11.5

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

        本文引用地址:http://www.104case.com/article/257108.htm

        在此將介紹在驅動程序中用于申請中斷的request_irq()調用,和用于釋放中斷的free_irq()調用。request_irq()函數調用的格式如下所示:

        intrequest_irq(unsignedintirq,

        void(*handler)(intirq,void*dev_id,structpt_regs*regs),

        unsignedlongirqflags,constchar*devname,oid*dev_id);

        其中irq是要申請的硬件中斷號。在Intel平臺,范圍是0~15。

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

        參數irqflags是中斷處理的一些屬性,其中比較重要的有SA_INTERRUPT。這個參數用于標明中斷處理程序是快速處理程序(設置SA_INTERRUPT)還是慢速處理程序(不設置SA_INTERRUPT)。快速處理程序被調用時屏蔽所有中斷。慢速處理程序只屏蔽正在處理的中斷。還有一個SA_SHIRQ屬性,設置了以后運行多個設備共享中斷,在中斷處理程序中根據dev_id區(qū)分不同設備產生的中斷。

        參數devname為設備名,會在/dev/interrupts中顯示。

        參數dev_id在中斷共享時會用到。一般設置為這個設備的device結構本身或者NULL。中斷處理程序可以用dev_id找到相應的控制這個中斷的設備,或者用irq2dev_map()找到中斷對應的設備。

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

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 临江市| 将乐县| 石嘴山市| 汝南县| 东城区| 海丰县| 淳安县| 云安县| 铁岭县| 莱阳市| 千阳县| 白沙| 蒙山县| 大厂| 洪洞县| 湟中县| 康马县| 镇赉县| 大城县| 新巴尔虎左旗| 涟水县| 财经| 城固县| 阳东县| 新巴尔虎右旗| 宽甸| 荃湾区| 金川县| 大洼县| 宝兴县| 平阳县| 石河子市| 林芝县| 张家界市| 娱乐| 集贤县| 苏州市| 秭归县| 岑溪市| 晋中市| 石楼县|