中斷處理介紹

2021-07-04 17:32:32 字數 992 閱讀 7836

當某一中斷源需要cpu為其進行中斷服務時,就輸出中斷請求訊號,使中斷控制系統的中斷請求觸發器置位,向cpu請求中斷。系統要求中斷請求訊號一直保持到cpu對其進行中斷響應為止。

cpu對系統內部中斷源提出的中斷請求必須響應,而且自動取得中斷服務子程式的入口位址,執行中斷 服務子程式。對於外部中斷,cpu在執行當前指令的最後乙個時鐘週期去查詢intr引腳,若查詢到中斷請求訊號有效,同時在系統開中斷(即if=1)的情 況下,cpu向發出中斷請求的外設回送乙個低電平有效的中斷應答訊號,作為對中斷請求intr的應答,系統自動進入中斷響應週期。

cpu響應中斷後,輸出中斷響應訊號,自動將狀態標誌暫存器fr或efr的內容壓入堆疊保護起來,然後將fr或efr中的中斷標誌位if與陷阱標誌位tf清零,從而自動關閉外部硬體中斷。因為cpu剛進入中斷時要保護現場,主要涉及堆疊操作,此時不能再響應中斷,否則將造成系統混亂。

保護斷點就是將cs和ip/eip的當前內容壓入堆疊儲存,以便中斷處理完畢後能返回被中斷的原程式繼續執行,這一過程也是由cpu自動完成。

當系統中有多個中斷源時,一旦有中斷請求,cpu必須確定是哪乙個中斷源提出的中斷請求,並由中斷控制器給出中斷服務子程式的入口位址,裝入cs與ip/eip兩個暫存器。cpu轉入相應的中斷服務子程式開始執行。

主程式和中斷服務子程式都要使用cpu內部暫存器等資源,為使中斷處理程式不破壞主程式中暫存器的內容,應先將斷點處各暫存器的內容壓入堆疊保護起來,再進入的中斷處理。現場保護是由使用者使用push指令來實現的。

中斷服務是執行中斷的主體部分,不同的中斷請求,有各自不同的中斷服務內容,需要根據中斷源所要完成的功能,事先編寫相應的中斷服務子程式存入記憶體,等待中斷請求響應後呼叫執行。

當中斷處理完畢後,使用者通過pop指令將儲存在堆疊中的各個暫存器的內容彈出,即恢復主程式斷點處暫存器的原值。

在中斷服務子程式的最後要安排一條中斷返回指令iret,執行該指令,系統自動將堆疊內儲存的 ip/eip和cs值彈出,從而恢復主程式斷點處的位址值,同時還自動恢復標誌暫存器fr或efr的內容,使cpu轉到被中斷的程式中繼續執行。

中斷整體介紹

外部中斷請求源 即外部中斷0 和1,經由外部引腳引入,在微控制器上有兩個引腳,外稱為int0 int1,也就是p3.2 p3.3這兩個引腳 mcs51 微控制器內部的中斷模組在每個cpu週期都查詢各個中斷源的狀態,當其發生預期的中斷事件時,通知cpu將程式跳轉到中斷服務程式所在的程式儲存器 rom ...

Linux中斷和中斷處理

眾所周知,處理器的速度跟外圍的硬體裝置的速度往往不在乙個數量級上,因此,如果核心採取讓處理器傳送乙個請求,然後專門等待回應的辦法,顯然差強人意。既然硬體處理的這麼慢,那麼核心就應該在這期間去處理其他事務,等待硬體真正完成了請求的操作後,再回過頭來對它進行處理。輪詢 polling 可能會是一種解決辦...

Linux中斷處理之共享中斷處理初探

在看lkd 第二版 第六章 中斷和中斷處理程式 的時候,剛開始接觸到中斷線號和共享中斷線的時候半天愣是沒有想明白,原來理解的中斷和中斷和中斷處理程式就是通過中斷線號來進行關聯,硬體發生中斷,然後通過中斷線號查詢對應的中斷處理程式,最後中斷處理程式返回,此次中斷則處理完畢,沒想到冒出來個共享中斷線,呵...