這個(gè)寄存器的每一位,表示對應中斷的搶占優(yōu)先級,每一位的復位值都是0,當我們把某一位設置為1的時(shí)候,這一位的優(yōu)先級就比其它位的優(yōu)先級高了。
比如我們設置了PT0位為1后,當單片機在主循環(huán)或者任何其它中斷程序中執行時(shí),一旦定時(shí)器T0發(fā)生中斷,作為更高的優(yōu)先級,程序馬上就會(huì )跑到T0的中斷程序中來(lái)執行。
反過(guò)來(lái),當單片機正在T0中斷程序中執行時(shí),如果有其它中斷發(fā)生了,還是會(huì )繼續執行T0中斷程序,直到把T0中的中斷程序執行完畢以后,才會(huì )去執行其它中斷程序。
當進(jìn)入低優(yōu)先級中斷中執行時(shí),如又發(fā)生了高優(yōu)先級的中斷,則立刻進(jìn)入高優(yōu)先中斷執行,處理完高優(yōu)先級級中斷后,再回去處理低優(yōu)先級中斷,這個(gè)過(guò)程就叫做中斷嵌套,也稱(chēng)為搶占。
所以搶占優(yōu)先級的概念就是,優(yōu)先級高的中斷可以打斷優(yōu)先級低的中斷的執行,從而形成嵌套。當然反過(guò)來(lái),優(yōu)先級低的中斷不能打斷優(yōu)先級高的中斷。
那么既然有搶占優(yōu)先級,自然也就有非搶占優(yōu)先級了,也稱(chēng)為固有優(yōu)先級。
請注意,在中斷優(yōu)先級的編號中,一般都是數字越小優(yōu)先級越高。
我們知道一共有1~6共6級的優(yōu)先級,這里的優(yōu)先級與搶占優(yōu)先級的一個(gè)不同點(diǎn)就是,它不具有搶占的特性,也就是說(shuō)即使在低優(yōu)先級中斷執行過(guò)程中又發(fā)生了高優(yōu)先級的中斷,那么這個(gè)高優(yōu)先級的中斷也只能等到低優(yōu)先級中斷執行完后才能得到響應。
既然不能搶占,那么這個(gè)優(yōu)先級有什么用呢?答案是多個(gè)中斷同時(shí)存在時(shí)的仲裁。
比如說(shuō)有多個(gè)中斷同時(shí)發(fā)生了,當然實(shí)際上發(fā)生這種情況的概率很低,但另外一種情況就常見(jiàn)的多了,那就是出于某種原因我們暫時(shí)關(guān)閉了總中斷,即EA=0,執行完一段代碼后又重新使能了總中斷,即EA=1,那么在這段時(shí)間里就很可能有多個(gè)中斷都發(fā)生了,但因為總中斷是關(guān)閉的,所以它們當時(shí)都得不到響應,而當總中斷再次使能后,它們就會(huì )在同時(shí)請求響應了。很明顯,這時(shí)也必須有個(gè)先后順序才行,這就是非搶占優(yōu)先級的作用了。誰(shuí)優(yōu)先級zui高先響應誰(shuí),然后按編號排隊,依次得到響應。
搶占優(yōu)先級和非搶占優(yōu)先級的協(xié)同,可以使單片機中斷系統有條不紊地工作,既不會(huì )無(wú)休止的嵌套,又可以保證必要時(shí)緊急任務(wù)得到優(yōu)先處理。
在后續的學(xué)習過(guò)程中,中斷系統會(huì )與我們如影隨形,處處都有它的身影,隨著(zhù)學(xué)習的深入,相信你對它的理解也會(huì )更加的深入。