ARM-Linux s3c2440 之中斷分析(一)

自由楓~發表於2011-12-20

====本文系本站原創,歡迎轉載! 轉載請註明出處:http://blog.csdn.net/yyplc===

硬體篇:

S3C2440 是arm920T架構,先溫習一下s3c2440中的中斷控制器原理和相關硬體構架。

 

中斷控制器(InterruptControler):

 

S3c2440A的中斷控制器有60箇中斷源,如DMA中斷,UART中斷,IIC中斷等,60箇中斷源在暫存器中用相應的位來表示。當有多箇中斷要求到來時,經過仲裁過程後,中斷控制器向CPU請求FIQ或者IRQ中斷。仲裁過程根據硬體中的優先順序模組來決定,其結果最後寫進中斷未決(intterrupt pending)暫存器中,通過中斷未決暫存器的值可以清楚哪個中斷髮生了。

S3c2440中斷控制器流程圖:

掛起

中斷模式(InterruptMode):

 

ARM920T(CPU)中有兩類中斷模式: FIQ中斷和 IRQ中斷,前者俗稱快中斷,後者稱為普通中斷。 所有中斷源均可以指定採取何種中斷模式。程式狀態暫存器(PSR)有F和I標誌位,當F 位 置 1 時,CPU不接受FIQ中斷,同樣,I位置1 時CPU不接受 IRQ中斷。所以中斷控制器需清零F位和I位,且將中斷遮蔽暫存器(INTMSK)清零後,方可接收中斷。

 

中斷未決暫存器(InterruptPending Register)

 

S3C2440A有兩個中斷未決暫存器:中斷源未決暫存器(SRCPND) 和中斷未決暫存器(INTPND)。這兩個暫存器指明瞭是否有中斷未決(產生)。當中斷源(一個或者多個同時發生)要求進行中斷服務程式時,SRCPND暫存器中相應的位置 1, 同時自動地,在INTPND暫存器中只有 1 位被置1(因為從上圖中可以看出INTPND是經過仲裁過程之後的,所以根據優先順序決定最高優先順序的中斷被置1)。 如果INTMSK中相應的中斷置 1,那麼,SRCPND中相應位將被置1,而INTPND不會有變化。當INTPND置位時,無論何時,只要I 或標誌位為0,那麼即可執行中斷服務程式。SRCPND 和 INTPND 暫存器可讀可寫,所以中斷服務程式執行完後應當先寫相應位的 1到SRCPND暫存器,然後寫相應位的 1 到INTPND暫存器完成清零,以便CPU能響應下一次中斷的發生。

 

中斷遮蔽暫存器(InterruptMask Register)

 

中斷遮蔽暫存器INTMSK用來指示中斷是否並禁止(遮蔽)。如果相應位置1 標明該中斷源被遮蔽,置0 則中斷可以正常服務。如果某一中斷MASK 為 1且中斷髮生,SRCPND中相應位會置1.

 

中斷優先順序模組(InterruptPrioprity Generating Block)

 

該模組可以服務32箇中斷要求,共由兩級仲裁單元組成。第一級有6個arbiter0 ~ 5,第二級為arbiter 6, 每個arbiter裡的中斷的優先順序採取輪換機制改變優先順序。

 

每個仲裁arbiter處理6箇中斷要求,規則由優先暫存器(PRIORTY)中相應的ARB_MODE (1位)和ARB_SEL(2位)來決定。仲裁arbiter中REQ0總是最高優先順序的,而REQ5總是最低的。所以只能在REQ1~REQ4中設定優先順序:

ARB_SEL位為00b時,優先順序:REQ0,REQ1,REQ2,REQ3,REQ4,REQ5

ARB_SEL位為01b時,優先順序:REQ0,REQ2,REQ3,REQ4,REQ1,REQ5

ARB_SEL位為10b時,優先順序:REQ0,REQ3,REQ4,REQ1,REQ2,REQ5

ARB_SEL位為11b時,優先順序:REQ0,REQ4,REQ1,REQ2,REQ3,REQ3

所謂優先順序採用輪換機制,舉例說是,例如REQ1發生時,這時ARB_SEL自動變成01b,所以,之後的優先順序將為:REQ0,REQ2,REQ3,REQ3,REQ1,REQ5,可見,當某一中斷髮生後(REQ1~REQ4),它的優先順序將放到最低(在REQ5前),不斷輪迴,同理REQ2發生時,ARB_SEL自動變成10b,之後的優先順序將為:REQ0,REQ3,REQ4,REQ1,REQ2,REQ5。但REQ0,或者REQ5發生時,ARB_SEL將維持不變。

以上是在相應地ARB_MODE為1的時候。當ARB_MODE被置0的時候,將按照預設的模式也就是上圖中所示。


關於外部中斷:

      s3c2440有24個GPIO輸入觸外部中斷,可分為低電平觸發,高電平觸發,下降沿觸發,上升沿觸發,或者下降,上升時觸發模式。


       通過以上,s3c2440的中斷控制器原理,硬體構架分析完了。後面再來分析,ARM-Linux s3c2440之中斷分析的軟體實現原理。

 

相關文章