新聞中心

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

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

        作者: 時間:2016-11-19 來源:網絡 收藏
        硬件篇:

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

        本文引用地址:http://www.104case.com/article/201611/318128.htm

        中斷控制器(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之中斷分析的軟件實現原理。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 米易县| 冷水江市| 沁水县| 嵊泗县| 宜黄县| 富阳市| 吉安县| 额济纳旗| 江口县| 岱山县| 永仁县| 通化市| 红河县| 城固县| 东海县| 梁平县| 温宿县| 乐都县| 东辽县| 卓资县| 宜宾县| 靖西县| 南阳市| 伊川县| 江西省| 延吉市| 湖口县| 中超| 永仁县| 乐陵市| 南通市| 乌什县| 金门县| 灯塔市| 炉霍县| 福海县| 营口市| 柘城县| 云龙县| 陇西县| 长兴县|