對於中斷系統的理解

2021-09-26 16:32:26 字數 2068 閱讀 2879

1.中斷作為異常的一種,我們可以從soc對異常的處理開始講起,再回過頭來具體分析中斷的處理過程。下面為乙個中斷

在soc內的處理過程:

主要分為兩個階段:

此異常處理程式包括現場保護->跳轉到實際異常處理程式

現場

s5pv210的中斷系統如何實現上述兩部分的:

第一階段:通過事先設定的異常向量表,跳轉到異常處理程式,保護現場,跳轉到實際的異常處理程式

提供一些暫存器來實現,當發生相應中斷時,硬體會自動的將相應isr推入一定的暫存器中,我們軟體只要去這個寄

存器中取出相應的isr位址,然後進入到isr中處理便可。

異常向量表初始化:在異常向量表中繫結相應異常處理的處理程式,並在異常處理程式中設定相應堆的設定,做好現場保護。

將中斷服務程式入口位址繫結到vicvectaddr處

關於清除中斷遮蔽和使能中斷的區別 :清除中斷遮蔽是在i/o處從源頭禁止中斷,使能中斷則是在cpu內部進行使能。兩者其中乙個禁止中斷,中斷便不能使用。

vicnintenable和vicnintenclear

(1)vicnintenable 對應interrupt enable,intenclear對應interrupt enable clear

(2)intenable暫存器負責相應的中斷的使能,intenclear暫存器負責相應的中斷的禁止。

(3)當我們想使能(意思就是啟用這個中斷,意思就是當硬體產生中斷時cpu能接收的到)某個中斷時,只要在這個中斷編號對應的vicnintenable的相應bit位寫1即可(注意這個位寫1其他位寫0對其他位沒有影響);如果我們想禁止某個中斷源時,只要向vicnintenclear中相應的位寫1即可。

注意:這裡的設計一共有2種:有些cpu是中斷使能和禁止是乙個暫存器位,寫1就使能寫0就進製(或者反過來寫1就進製寫0就使能),這樣的中斷使能設計就要非常小心,要使用我們之前說過的讀改寫三部曲來操作;另一種就是使能和禁止分開為2個暫存器,要使能就寫使能暫存器,要禁止就寫禁止暫存器。這樣的好處是我們使能/禁止操作時不需要讀改寫,直接寫即可。

vicnintselect

(1)設定各個中斷的模式為irq還是fiq。一般都設定成irq

(2)irq和fiq究竟有何區別。210中支援2種中斷,irq和fiq。irq是普通中斷,fiq是快速中斷。快速中斷提供一種更快響應處理的中斷通道,用於對實時性要求很高的中斷源。fiq在cpu設計時預先提供了一些機制保證fiq可以被快速處理,從而保證實時性。fiq的限制就是只能有乙個中斷源被設定為fiq,其他都是irq。

(3)cpu如何保證fiq比irq快?有2個原因:第一,fiq模式有專用的r8~r12,因此在fiq的isr中可以直接使用r8-r12而不用儲存,這就能節省時間;第二,異常向量表中fiq是最後乙個異常向量入口。因此fiq的isr不需要跳轉,可以直接寫在原地,這樣就比其他異常少跳轉一次,省了些時間。

vicnirqstatus和vicnfiqstatus

(1)中斷狀態暫存器,是唯讀的。當發生了中斷時,硬體會自動將該暫存器的對應位置為1,表示中斷發生了。軟體在處理中斷第二階段的第一階段,就是靠查詢這個暫存器來得到中斷編號的。

vicnvectpriority0~vicnvectpriority31

(1)中斷優先順序設定暫存器,設定多個中斷同時發生時先處理誰後處理誰的問題。一般來說高優先順序的中斷可以打斷低優先順序的中斷,從而巢狀處理中斷。當然了有些硬體/軟體可以設定不支援中斷巢狀。

vicnvectaddr0~vicnvectaddr31、vicnaddr

(1)這三個暫存器和210中斷處理第二階段的第二階段有關。

(2)vicnvectaddr0到31這32個暫存器分別用來存放真正的各個中斷對應的isr的函式位址。相當於每乙個中斷源都有乙個vectaddr暫存器,程式設計師在設定中斷的時候,把這個中斷的isr位址直接放入這個中斷對應的vectaddr暫存器即可。

(3)vicnaddr這個暫存器是只需要讀的,它裡面的內容是由硬體自動設定的。當發生了相應中斷時,硬體會自動識別中斷編號,並且會自動找到這個中斷的vectaddr暫存器,然後將其讀出複製到vicnaddr中,供我們使用。這樣的設計避免了軟體查詢中斷源和isr,節省了時間,提高了210的中斷響應速度。

對於不可遮蔽中斷NMI,CPU響應中斷的條件有哪些

按照是否可以被遮蔽,可將中斷分為兩大類 不可遮蔽中斷 又叫非遮蔽中斷 和可遮蔽中斷。不可遮蔽中斷源一旦提出請求,cpu必須無條件響應,而對可遮蔽中斷源的請求,cpu可以響應,也可以不響應。cpu一般設定兩根中斷請求輸入線 可遮蔽中斷請求intr interrupt require 和不可遮蔽中斷請求...

對於STL的理解

stl standard template library stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明人很多年的傑作。stl的目的是標準化元件,這樣就不用重新開發,可以使用...

對於ftok的理解

回顧了一下以前的實驗,一直不理解為什麼在訊息佇列中要使用ftok,比如下面的乙個例項 if key ftok a 1 qid msgget key,ipc creat 0666 建立乙個訊息佇列 if qid 0 printf created queue id d n qid 輸出訊息佇列的id 要...