微控制器的中斷系統(一)
想總結中斷由來已久,但是總感覺一章的東西,太多,無從下手。
前幾天看到一句話“能把自己學會的東西說出來,才是真的學會”。今天,就要會一會這中斷系統。
圖片和文字內容來自:普中科技的ppt,百度文庫,《作業系統》,《組成原理》我整理整理。
先不談中斷,先看看cpu可以如何處理輸入輸出。比如,現在我的鍵盤在輸入,試問cpu如何知道我輸入完成,以將輸入的內容送入記憶體進行處理?最簡單的是,cpu原地等待,cpu進行不斷的查詢,查詢鍵盤是否輸入完成。但是這樣,cpu就不能去做其他事情,嚴重影響cpu的速度。
此時可以引入中斷的方式。cpu工作自己的。鍵盤輸入自己的。當鍵盤輸入完成,發出中斷請求。如果cpu決定響應該中斷,儲存當前工作進度,去提取輸入的內容。中斷處理結束後,恢復原來工作現場,繼續工作。這樣cpu的效率就大大提高。
中斷的概念:
CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷髮生);
CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);
待CPU將事件B處理完畢後,再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷 。
![](https://img-blog.csdnimg.cn/20181129224748495.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務A,轉去處理事件B。對事件B處理完畢後,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現上述中斷功能的部件稱為中斷系統。
51微控制器的中斷系統結構
89C51/52的中斷系統有5箇中斷源 ,2個優先順序,可實現二級中斷巢狀 。
![](https://img-blog.csdnimg.cn/2018112922560454.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20181129230231169.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
注意:上面都是請求中斷,但cpu是否響應中斷?這由IE暫存器決定。
只有IE的開關閉合(即cpu允許),當請求中斷時,cpu才會響應。
中斷請求標誌(TCON):
1、TCON的中斷標誌
![](https://img-blog.csdnimg.cn/20181130112659504.png)
(目前來說,只關心背景為深色的位)
IT0(TCON.0),外部中斷0觸發方式控制位。
當IT0=0時,為電平觸發方式。
當IT0=1時,為邊沿觸發方式(下降沿有效)。
IE0(TCON.1),外部中斷0中斷請求標誌位。
IT1(TCON.2),外部中斷1觸發方式控制位(類似IT0)。
IE1(TCON.3),外部中斷1中斷請求標誌位。
TF0(TCON.5),定時/計數器T0溢位中斷請求標誌位。
TF1(TCON.7),定時/計數器T1溢位中斷請求標誌位。
中斷請求標誌(SCON):
中斷允許控制(IE)
CPU對中斷系統所有中斷以及某個中斷源的開放和遮蔽是由中斷允許暫存器IE控制的。
![](https://img-blog.csdnimg.cn/20181130113853737.png)
EX0(IE.0),外部中斷0允許位;
ET0(IE.1),定時/計數器T0中斷允許位;
EX1(IE.2),外部中斷0允許位;
ET1(IE.3),定時/計數器T1中斷允許位;
ES(IE.4),序列口中斷允許位;
EA (IE.7), CPU中斷允許(總允許)位。(所以執行中斷時,總中斷必須開啟)
中斷優先順序(中斷優先暫存器--IP):
同一優先順序中的中斷申請不止一個時,則有中斷優先權排隊問題。同一優先順序的中斷優先權排隊,由中斷系統硬體確定的自然優先順序形成,其排列如所示:
![](https://img-blog.csdnimg.cn/20181130114234849.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
這裡面稍微提下中斷服務程式入口。當執行中斷的時候,cpu要轉去執行中斷程式。但是如何知道程式的入口位置?
可以把中斷的程式入口放在0003H的位置,cpu將這裡面儲存的程式入口放入pc(每次下一步執行的指令)中。(這只是我目前的想法,不知道正確與否)
中斷號:
這在後面寫程式會用到。
![](https://img-blog.csdnimg.cn/20181130115049576.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
如果是外部中斷0的函式,在中斷函式的後面加上 interrupt 0(0為外部中斷0的中斷號)。
中斷優先順序三條原則:
CPU同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。
正在進行的中斷過程不能被新的同級或低優先順序的中斷請求所中斷。
正在進行的低優先順序中斷服務,能被高優先順序中斷請求所中斷。
為了實驗上述判優,有硬體排隊器;當然也可以用軟體實現判優。
![](https://img-blog.csdnimg.cn/20181201200421236.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM4ODE2OTI0,size_16,color_FFFFFF,t_70)
上面這些優先順序的設定是IP(中斷優先暫存器),我沒有用過,也不清楚怎麼用,這裡轉載下其他文章關於它的介紹。
來源:http://www.sohu.com/a/191453790_99957951
P在特殊功能暫存器中,位元組地址為B8H,位地址(由低位到高位)分別是B8H一BFH,IP用來設定各個中斷源屬於兩級中斷中的哪一級,IP的基本格式如下圖所示:
![](http://5b0988e595225.cdn.sohucs.com/images/20170912/f2b3e9ae5dc147febac6848d5e7eb94b.jpeg)
×:無效位。
PS:序列I/O中斷優先順序控制位。PS=1,高優先順序;PS=0,低優先順序。
PTl:定時器/計數器1中斷優先順序控制位。PTl=1,高優先順序;PTl=0,低優先順序。
Pxl:外部中斷1中斷優先順序控制位。Pxl=1,高優先順序;PXl=O,低優先順序。
PT0:定時器/計數器o中斷優先順序控制位。PT0=1,高優先順序;PTO=0,低優先順序。
Px0:外部中斷0中斷優先順序控制位。Px0=1,高優先順序;Px0=0,低優先順序。
中斷的使用:
使用中斷,要熟悉中斷的結構,要根據要求設定暫存器。
1、首先明確使用哪個中斷。
2、接著就要設定TCON(或者SCON),中斷請求標誌。
3、緊接著是設定IE,中斷允許標誌。
當上述設定滿足時,微控制器執行滿足條件會觸發中斷請求,此時中斷允許,進入中斷,執行中斷。
引用文章:
51普中微控制器的ppt
唐朔飛的《計算機組成原理》