自己學驅動18――中斷
來源:程序員人生 發布時間:2015-04-01 08:29:51 閱讀次數:3526次
1.中斷原理
當某個事件產生時,硬件會設置某個寄存器;CPU在履行完1個指令時,通過硬件查看這個寄存器,如果發現所關注的事件產生了,則中斷當前程序流程,跳轉到1個固定的地址去處理這個事件,最后返回繼續履行被中斷的程序。
2.中斷處理進程
(1)中斷控制器聚集各類外設發出的中斷信號,然后告知CPU。
(2)CPU保存當前程序的運行環境(各個寄存器等),調用中斷服務程序(ISR,Interrupt Service Routine)來處理這些中斷。
(3)在ISR中通過讀取中斷控制器、外設的相干寄存器來辨認這是哪一個中斷,并進行相應的處理。
(4)清除中斷:通過讀寫中斷控制器和外設的相干寄存器實現。
(5)最后恢復被中斷程序的運行環境,繼續履行。
3.使用中斷的步驟
(1)設置好中斷模式和快速中斷模式下的棧:當產生中斷IRQ時,CPU進入中斷模式,這時候使用中斷模式(IRQ)下的棧;當產生快速中斷FIQ時,CPU進入快速中斷模式,這時候使用快速中斷模式下的棧。
(2)準備好中斷處理函數:
在異常向量表中設置好當進入中斷模式或快速中斷模式時的跳轉函數;
對IRQ,讀取INTPND寄存器或INTOFFSET寄存器的值來肯定中斷源,然后分別處理,而對FIQ,由于只有1個中斷可以設置為FIQ,則無需判斷中斷源;
清除中斷,清除中斷應當從源頭開始,首先,需要的話,操作具體的外設清除中斷信號,其次清除SUBSRCPND、SRCPND寄存器中相應的位(往相應位寫1便可),最后,清除INTPND寄存器中相應位(往相應位寫1便可),最簡單的辦法"INTPND = INTPND"。
(3)進入、退出IRQ或FIQ時需要保存、恢復被中斷程序的運行環境。
(4)根據具體中斷,設置相干外設。
(5)對"Request sources(without sub-register)"中的中斷,將INTSUBMSK寄存器中相應位設為0。
(6)肯定使用此中斷的方式:FIQ或IRQ。
如果是FIQ,則在INTMOD寄存器中設置相應位為1;
如果是IRQ,則在RIORITY寄存器中設置優先級。
(7)如果是IRQ,則將INTMSK寄存器中相應位設為0(FIQ不受INTMSK寄存器控制)。
(8)設置CPSR寄存器中的I-bit,使能IRQ或FIQ。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈