新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM-Linux s3c2440 之中斷分析(一)

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

作者: 時間:2016-11-19 來源:網(wǎng)絡 收藏
硬件篇:

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

本文引用地址:http://2s4d.com/article/201611/318128.htm

中斷控制器(InterruptControler):

S3c2440A的中斷控制器有60個中斷源,如DMA中斷,UART中斷,IIC中斷等,60個中斷源在寄存器中用相應的位來表示。當有多個中斷要求到來時,經過仲裁過程后,中斷控制器向CPU請求FIQ或者IRQ中斷。仲裁過程根據(jù)硬件中的優(yōu)先級模塊來決定,其結果最后寫進中斷未決(intterrupt pending)寄存器中,通過中斷未決寄存器的值可以清楚哪個中斷發(fā)生了。

S3c2440中斷控制器流程圖:

掛起

中斷模式(InterruptMode):

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

中斷未決寄存器(InterruptPending Register)

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

中斷屏蔽寄存器(InterruptMask Register)

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

中斷優(yōu)先級模塊(InterruptPrioprity Generating Block)

該模塊可以服務32個中斷要求,共由兩級仲裁單元組成。第一級有6個arbiter0 ~ 5,第二級為arbiter 6, 每個arbiter里的中斷的優(yōu)先級采取輪換機制改變優(yōu)先級。

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

ARB_SEL位為00b時,優(yōu)先級:REQ0,REQ1,REQ2,REQ3,REQ4,REQ5

ARB_SEL位為01b時,優(yōu)先級:REQ0,REQ2,REQ3,REQ4,REQ1,REQ5

ARB_SEL位為10b時,優(yōu)先級:REQ0,REQ3,REQ4,REQ1,REQ2,REQ5

ARB_SEL位為11b時,優(yōu)先級:REQ0,REQ4,REQ1,REQ2,REQ3,REQ3

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

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

關于外部中斷:

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

通過以上,s3c2440的中斷控制器原理,硬件構架分析完了。后面再來分析,ARM-Linux s3c2440之中斷分析的軟件實現(xiàn)原理。



評論


技術專區(qū)

關閉