單片機跑起來第三章:中斷機制
中斷機制
中斷機制在單片機及嵌入式系統(tǒng)中是重中之重,我們必須深入理解。首先我們要明白一點:CPU執(zhí)行指令代碼,并非一直順序地逐條執(zhí)行,而是可能突然跳到某段代碼上去的。因為這段代碼的優(yōu)先級更高,或者說它更加緊迫,CPU必須暫時放下手上的的工作,立即去執(zhí)行它,否則就可能導(dǎo)致不良的后果,甚至是嚴(yán)重的事故。這個“突然跳轉(zhuǎn)”有時是可以人為預(yù)見的,或者是設(shè)計人員故意使然,但有些時候卻是隨機的,無法事先斷定它發(fā)生的具體時間。這就是“中斷”最為通俗的表述,如圖1.22所示。
圖1.22 對“中斷機制”的表述
有人說:“中斷似乎是在給CPU搗亂嘛,它總是在打斷程序的正常執(zhí)行?!辈诲e,但是不能說是“搗亂”,因為中斷的存在是合理的,是為了解決實實在在的問題而產(chǎn)生的。比如說,一個單片機正在正常工作,它同時還要接收來自于串口的數(shù)據(jù),但是它又不知道數(shù)據(jù)何時會到,為了解決這一問題,我們可以采用CPU輪詢方式,即不停地查看是否有新的數(shù)據(jù)到來,如果有則進行接收。這樣作的最大問題在于浪費CPU的運行時間,這可能會影響到其它任務(wù)的執(zhí)行效率。如果使用中斷方式,將使CPU得以解放,在沒有數(shù)據(jù)到來之前它可以安心地去作其它工作。串口控制器(CPU外設(shè))在接收到新的數(shù)據(jù)后主動通知CPU(這個通知的過程依賴于專門的中斷控制電路以及CPU的中斷源),CPU立即跳到事先設(shè)計好的處理代碼(ISR,中斷服務(wù)程序)去執(zhí)行,完成數(shù)據(jù)的接收和處理。最后再跳回到原來的“斷點”處繼續(xù)完成手上的工作。
關(guān)于中斷,其實包含有非常多的內(nèi)容,比如現(xiàn)場維護、中斷向量、中斷優(yōu)先級、中斷響應(yīng)速度、中斷的嵌套等等。要將這一切融會貫通,我們才能在實際的開發(fā)過程中游刃有余。不過,中斷很多時候要比我們想像得更加復(fù)雜一些:如果主程序在順序執(zhí)行過程中產(chǎn)生了中斷,CPU立即轉(zhuǎn)向中斷服務(wù)程序,那如果在執(zhí)行中斷服務(wù)程序的過程中,再一次產(chǎn)生了中斷,CPU又該何去何從呢?這就是上面所說的“中斷嵌套”所要解決的問題(這里只是簡單說說,讓大家心中有初步的認識)。
好,本章到這里就告一段落了。振南希望通過此章能夠讓大家從根本上實實在在地認識到CPU與單片機體系結(jié)構(gòu)以及運作機理的本質(zhì),在腦中建立起一個形象的模型。有了這個基礎(chǔ),大家對單片機的理解才能真正作到入木三分,學(xué)習(xí)和領(lǐng)悟才能事半功倍。
單片機和C語言其實不難,從某種意義上來說,它只不過是一個“熟練工種”,最重要的是“入門”。基礎(chǔ)加上我們的聰明才智,每一個人都能成為高手!