PIC的中斷入口
在PIC的一些中、低端型號中,往往只有一個中斷函數(shù)入口,而且沒有中斷優(yōu)先級,這對于很多在學校學習89C51核出來的學生,往往給他們帶來一定的學習障礙。
1、PIC中檔MCU的中斷入口固定為ROM首葉的0X0004地址,無論發(fā)生什么樣的中斷,應用程序都將被打斷并跳轉(zhuǎn)到這個地址去執(zhí)行相關的中斷處理函數(shù)。
2、在51系列中,中斷源的區(qū)分是由硬件完成的,但在PIC上,這個需要工程師自己通過軟件去判斷。
3、因為只有一個中斷入口,所以也沒有51那樣的兩級中斷優(yōu)先級,具體何種中斷源應該優(yōu)先執(zhí)行完全由工程師自己的軟件確定,這是通過中斷函數(shù)中的中斷源查詢代碼的順序決定的,可以把這個概念稱呼為軟件優(yōu)先級。
4、PIC的中斷結(jié)構決定了PIC一般不考慮中斷嵌套,假使現(xiàn)在正在處理軟件優(yōu)先級中低優(yōu)先級的中斷源,即使此時產(chǎn)生更高優(yōu)先級的中斷,一般也必須處理完畢后退回MAIN函數(shù)后再次響應進入,這是因為響應中斷后,MCU硬件會自動關閉GIE標志位,這樣其它中斷請求就會被暫時掛起并在中斷退出后立即響應,當然,此時發(fā)出的中斷請求標志在被響應前將會一直被保持。
5、因為PIC中端MCU采用的是全硬件堆棧,沒有數(shù)據(jù)堆棧,所以,關于中斷現(xiàn)場保護也完全交給工程師自由把握,所以進入中斷后惟一辦法就是把需要保護的數(shù)據(jù)保存到RAM中進行備份,中斷退出時再給予恢復,至于那些積存器需要被保護,這完全取決于工程師,一般來說,W、STATUS、PCLATH、FSR是必須的,其它需保護的內(nèi)容取決于工程師在中斷函數(shù)將會使用到哪些變量,并且這些變量在其它函數(shù)中也確定有使用記錄。對于代碼超過2K的程序,PCLATH是必須的,否則可不考慮它的保存,這是因為PC本身可保證2K以內(nèi)的尋址空間,而PC是由硬件自動壓棧到硬件堆棧中去了。
6、一個中斷入口不代表只能處理中斷源,通過上面的描述,我們可以清楚的了解,其實事情很簡單,其道理就是:多個中斷源對著一個中斷入口,當發(fā)生某一個中斷時將轉(zhuǎn)想中斷入口,處理完畢后退出,如果發(fā)生別的中斷,還是從這個入口進去。
7、如何寫一個可靠的中斷函數(shù)是一個麻煩,當然這是針對ASM而言,如果你使用PICC,那么C編譯器會自動幫你處理掉大多數(shù)問題,但有關中斷源的查詢寫法還是要注意一下的,這點你可以自己搜索網(wǎng)絡文章,網(wǎng)絡有很多地方可提供張明峰先生那本入門書中有關PICC的那個獨立章節(jié),那里面把最基本、最關鍵的問題都講過了,請自行查閱。
評論