ARM學習之中斷體系結構

BLSxiaopanlaile發表於2017-08-20

今天下午和晚上研究了一直在研究s3c2410中斷體系結構,雖然以前老師上課也接觸過,考試也考過,但仔細研究起來,還是有不少收穫的。現記述如下:

1.什麼是中斷?
答:中斷是CPU保證併發程式的一種機制。它使得CPU在執行程式的時候能夠響應異常的情況發生。
其實,在CPU在執行的過程中,如何知道各類外設發生了某些沒預期的事,比如說串列埠接受到了資料、USB介面中插入了裝置、按下了某個按鍵。有兩種方法,一個是前面所說的中斷、另一個就是輪詢方式。(就是不斷的while迴圈查詢)。從某種程度上說,這兩種方式其實是一樣的。前者是把查詢的時間跨度縮小到每條指令執行結束後,即當某事件發生時,硬體會設定某個暫存器;CPU在每執行完一條指令時,通過硬體檢視這個暫存器,來“查詢”是否有關注的事件發生。

2.s3c2440基本的中斷處理流程是什麼?
答:如下圖所示。
這裡寫圖片描述

我是這樣簡單理解的:s3c2440有兩種型別的中斷源。子中斷源和普通中斷源。型別相似的子中斷源若有中斷請求發生,會聚合成一個“大的”普通中斷源(不知道這樣形容,貼切不)。當然這是在子中斷源沒有被遮蔽的條件下。這個子中斷源的中斷請求要想成功,還是挺困難的,得經過兩道坎。首先,子中斷源遮蔽暫存器不能遮蔽它,然後中斷遮蔽暫存器也不能遮蔽它才有可能得到CPU的“眷顧”(當然,它還得和一大批同時請
求的其他請求源競爭)。 普通的中斷源相當於“妃子”,只要有請求,而且優先順序較高就能得到CPU的“青睞”。還有一個皇后級別的中斷源,叫做快速中斷源。她比較牛X,只要請求,CPU就會“臨幸”。(好似宮鬥劇啊)。

3.當發生中斷後,具體我們該如何程式設計呢?
答:當一個異常發生時,這時ARM 的CPU將自動完成如下事情(要記住,是自動):
(1)、lr暫存器儲存目前指令的下一條指令地址。一般是(PC+4或PC+8)
(2)、將CPSR的值複製到SPSR。
(3)、將CPSR的工作模式位設定為異常對應的工作模式。
(4)、轉去執行此異常對應的向量表中的相應指令(並不只是中斷處理函式)。

對於我們來說,我們需要在異常向量表對應的地址處完成以下事情:
(1)、儲存執行的環境。此處所說的執行環境指的是前一模式中的執行環境。雖然這是已經進入到異常模式,但是由於異常模式和普通的模式都共享一些暫存器,此處異常模式下的的這些暫存器還儲存的上前一模式中的資料,所以得儲存至堆疊。
(2)、進入ISP函式。即自己所寫的中斷處理函式,處理中斷。
(3)、在中斷處理函式中,要判斷是哪個中斷源發出的請求(如果中斷源很明確,則不用判斷)、正式處理中斷請求(接受資料、傳送資料、點亮燈等等)、最後別忘了要清除中斷源。
(4)、中斷返回,恢復儲存的執行環境。

4.中斷向量表是什麼?
答:中斷向量表就是發生中斷後,CPU就會根據中斷向量表找到斷向量入口地址,在此地址上繼續執行。以前上課的時候,覺得好神祕,我去,硬體方式實現的中斷向量表。現在看看,其實也不是很難(至少ARM9是這樣)。簡單來說,中斷向量表也不是一個真正的表,它只是事先規定好了,如果發生這個中斷就去這個地址上繼續執行。看起來像是對映了一張表,可以把它看成一張邏輯的表。 發生中斷後,CPU就去實現規定好的地址上繼續執行。所以呢,你就必須在這個地址上寫上你的中斷處理函式。如果這個地址上什麼也沒有,那麼程式就要死翹翹了。

相關文章