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