中斷實驗
一、進入中斷前的準備:
1、儲存進入中斷前的環境
2、進入中斷模式,設定中斷模式下的棧
二、中斷處理框圖詳解:
第一路:
當內部觸發中斷後,subsrcpnd相應的位置1,代表某個中斷發生。並且srcpnd的相應位也置1。
對於普通中斷irq,當同時發生幾個中斷的時候,我們要通過優先順序來決定哪個先執行,哪個後執行。
這時候,優先順序高的先執行,此時intpnd相應位置1。中斷服務函式中判斷中斷源時,可以通過
intpnd或者intoffset來判斷。
第二路:
外部中斷發生的時候,直接在srcpnd處相應位置1,然後往後執行和第一路差不多,最後進入了中斷函式。
三、中斷控制暫存器詳解:
1、srcpnd與subsrcpnd的父子關係
由於2440是32位cpu,所以srcpnd只能對應32個中斷。但是cpu的中斷遠比32個多。那麼怎麼辦呢。srcpnd的32個位對應的中斷中,
有的是1位對應一組中斷。當srcpnd的一組中斷置1時,我們不能判斷這一組中斷中那個被發生了中斷。所以才有了subsrcpnd來指定
這一組中斷中到底哪一位發生了中斷。
2、intmsk和intsubmsk的父子關係
和上面的暫存器一樣,***msk暫存器是遮蔽某個中斷的。intmsk和srcpnd是一組對應關係。但是intmsk不能遮蔽一組中斷。所以必須有乙個
子中斷遮蔽器intsubmsk來遮蔽上面第一條中說的具體中斷。但是intmsk不能遮蔽fiq中斷。
3、要遮蔽快速中斷,需要另乙個暫存器,那就是intmod。
4、經過優先順序仲裁後,優先順序最高的中斷源優先發生中斷,使得intpnd和intoffset相應位置1。
四、進入中斷函式後:
通過intoffset的相應位來判斷中斷源,然後執行相應的操作後,最後是清中斷的過程。
清中斷:(從源頭開始清除)
1、清楚subsrcpnd srcpnd中相應位(往相應位寫1)
2、清楚intpnd的相應位(往相應位寫1)
3、在清除前面幾個暫存器後,intoffset暫存器的相應位被自動清除。
4、在處理外部中斷時,還需清除eintpnd的相應位。
五、恢復到之前的工作模式:
恢復現場
六、核心語句
實驗現象:通過按鍵中斷,控制led燈的亮滅。
1、在進入中斷模式之前需要進行前乙個模式的各個暫存器的儲存工作
2、在開始程式之前,需要把中斷開啟
由於之前沒有把邏輯搞明白,在開中斷的時候把&寫成了|,導致中斷一直沒開啟。
七、總結:
中斷實驗是s3c2440中比較重要的裸機程式實驗。經過之前的多次實驗,要注意的問題很多,犯得錯誤只要是一下幾點:
1、未正確開啟中斷
2、定義引腳位址時候出錯,浪費了很多時間
3、makefile中鏈結時候的順序出錯,導致程式不執行
所以在今後的學習中,要注意細節,多做筆記。加油!!!
S3c2440中斷學習
中斷功能在微控制器上一直在用,今天學習在2440上用外部中斷的方式,實現按鍵檢測功能。1.中斷生命週期 中斷源,中斷過濾,中斷處理 1.1 中斷源 2440有60個中斷源。1.2 中斷過濾 有兩個關卡,submask和mask,中斷方式有mode控制。1.3 中斷處理 非向量方式 2440 向量方式...
S3C2440 中斷控制暫存器
1 subsrcpnd 暫存器 sub source pending subsrcpnd 暫存器被用來標識 int rxd0 int txd0 等中斷 s3c2410中這類中斷有 11 個,而 s3c2440 中有 15 個 是否已經發生,每位對應乙個中斷。當這些中斷發生並且沒有被 intsubms...
S3C2440中斷暫存器
s3c2440的中斷暫存器 1.中斷分兩大類 內部中斷和外部中斷。2.外部中斷。24個外部中斷占用gpf0 gpf7 eint0 eint7 gpg0 gpg15 eint8 eint23 用這些腳做中斷輸入,則必須配置引腳為中斷,並且不要上拉。具體參考datesheet資料手冊。暫存器 extin...