淺談S3C2440的中斷寄存器及中斷過程

來源:互聯網
上載者:User
淺談S3C2440的中斷寄存器及中斷過程           S3C2440一共有60個中斷源,其中有15個子中斷源,它們與SUBSRCPND寄存器中的每一位相對應,其他45個中斷源與SRCPND中的每一位相對應。要注意的是EINT4~7對應的是同一位SRCPND[4],而EINT8~23對應的也是SRCPND[5]一位。

1 S3C2440的中斷寄存器

          中斷分兩大類:外部中斷和內部中斷。

1.1 外部中斷寄存器          24個外部中斷佔用GPF0-GPF7(EINT0-EINT7),GPG0-GPG15(EINT8-EINT23)。用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體可參考datesheet資料手冊。
寄存器:
             EXTINT0-EXTINT2:分別設定EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的觸發方式(高電平觸發、低電平觸發、下降沿觸發、上升沿觸發)。
             EINTFLT0-EINTFLT3:控制濾波時鐘和濾波寬度。
             EINTPEND:這個是中斷掛起寄存器,清除時要寫1,後面還有幾個是寫1清除。當一個外部中斷(EINT4-EINT23)發生後,那麼相應的位會被置1。為什麼沒有EINT0-EINT3,因為它們分別由SRCPND寄存器的後4位控制。
            EINTMASK:這個簡單,是屏蔽中斷用的,也就是說位為1時,此次中斷無效。

1.2 內部中斷寄存器            內部中斷有8個寄存器。寄存器:
            SUBSRCPND:當一個中斷髮生後,那麼相應的位會被置1,表示一個中斷髮生了。
            INTSUBMSK:與上一個是一樣的,中斷屏蔽寄存器。
            SRCPND:當一個中斷髮生後,那麼相應的位會被置1,表示一個或一類中斷髮生了。
            INTMSK:用來屏蔽SRCPND寄存器所標識的中斷。但只能屏蔽IRQ中斷,不能屏蔽FIQ中斷。
            INTMOD:當INTMOD中某位被設定為1時,它對應的中斷被設為FIQ,CPU將進入快速中斷模式。
            PRIORITY:用於設定IRQ中斷的優先順序。具體使用方法可參考晶片手冊。
            INTPND:中斷優先順序仲裁器選出優先順序最高中斷後,這個中斷在INTPND寄存器中的相應位被置1,隨後,CPU進入中斷模式處理它。同一時間內,此寄存器只有一位被置1。
            INTOFFSET:用來表示INTPND寄存器中哪位被置1了,即記錄INTPND中位[x]為1的位x的值。清除INTPND、SRCPND時自動清除。

1.3 各寄存器關係:

圖1 各中斷寄存器間的關係2 中斷過程2.1 內部中斷過程

a 如果是不帶子中斷的內部中斷:發生後SRCPND相應位置1,如果沒有被INTMSK屏蔽,那麼等待進一步處理。
b 如果是帶子中斷的內部中斷:發生後SUBSRCPND相應位置1,如果沒有被INTSUBMSK屏蔽,那麼SRCPND相應位置1,等待進一步處理,幾個SUBSRCPND可能對應同一個SRCPND,對應表如下:


2.2 外部中斷過程

a 如果是外部中斷:EINT0-EINT3發生後SRCPND相應位置1,如果沒有被INTMSK屏蔽,那麼等待進一步處理。EINT4-EINT23發生後EINTPEND相應位置1,如果沒有被EINTMASK屏蔽,那麼SRCPND相應位EINT4-7 或EINT8-23置1,如果沒有被INTMSK屏蔽,等待進一步處理,幾個EINTPEND對應同一個SRCPND,對應表如下:



           三種中斷都等待進一步處理了。接下來從SRCPND往下看,看INTMSK。如果中斷被屏蔽了,就不用說了(注意:快中斷也能被屏蔽)。如果沒有被屏蔽,那麼會進一步到INTMOD。如果是快中斷,那麼直接出來,進入FIQ(即CPU進入快中斷模式處理)。如果是普通中斷,那麼SRCPND可以有多為置1(FIQ只能有一個),這時就會經過PRIORITY選出一個優先順序高的,然後把根據選出的中斷把INTPND相應位置1(注意:只能選出一個),進入IRQ,讓CPU處理。

2.3 中斷的開啟

a.如果是不帶子中斷的內部中斷,只需設定INTMSK,讓它不屏蔽中斷就可以了。
b 如果是帶子中斷的內部中斷,需設定INTSUBMSK和INTMSK,讓它們不屏蔽中斷就可以了。
c 如果是外部中斷,對於EINT8-23需要設定EINTMASK和INTMSK。對於EINT0-EINT3隻需設定INTMSK。

2.4 中斷的清除

a.如果是不帶子中斷的內部中斷,只需清除SRCPND,注意清除需位置1。
b 如果是帶子中斷的內部中斷,需清除SRCPND和SUBSRCPND,注意先清除SUBSRCPND,再清除SRCPND。因為,如果你先清除SRCPND的話,然後在清除SUBSRCPND的過程中,SRCPND會以為又有中斷髮生,又會置1。也就是說一次中斷會響應兩次。所以必須先掐斷源頭。
c 如果是外部中斷,對於EINT8-23需要清除EINTPEND和SRCPND(同樣注意順序)。對於EINT0-EINT3隻需清除SRCPND。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.