1. 程式人生 > >STM32的中斷和事件

STM32的中斷和事件

上圖框圖中對應的暫存器可以在技術手冊中找到相關的意義。


上圖19箇中斷源的意義也可以在技術手冊中找到,



可以這樣簡單的理解:


詳細點的理解:

在STM32中,中斷與事件不是等價的,一箇中斷肯定對應一個事件,但一個事件不一定對應一箇中斷。

事件只是一個觸發訊號(脈衝),而中斷則是一個固定的電平訊號。

事件:是表示檢測到某一動作(電平邊沿)觸發事件發生了。中斷:有某個事件發生併產生中斷,並跳轉到對應的中斷處理程式中。事件可以觸發中斷,也可以不觸發。中斷有可能被更優先的中斷遮蔽,事件不會。

中斷訊號也即中斷事件.它往往有暫存器作記錄,但也有例外,如AVR的腳的電平變化引起的中斷,就沒有暫存器記錄.

事件是中斷的觸發源,開放了對應的中斷遮蔽位,則事件可以觸發相應的中斷。 

事件還是其它一些操作的觸發源,比如DMA,還有TIM中影子暫存器的傳遞與更新;

簡單點就是中斷一定要有中斷服務函式,但是事件卻沒有對應的函式.但是事件可以觸發其他關聯操作,比如觸發DMA,觸發ADC取樣等.可以在不需要CPU干預的情況下,執行這些操作.中斷則必須要CPU介入.

中斷和事件的產生源都可以是一樣的! 之所以分成2個部分,由於中斷是需要CPU參與的,需要軟體的中斷服務函式才能完成中斷後產生的結果; 但是事件,是靠脈衝發生器產生一個脈衝,進而由硬體自動完成這個事件產生的結果,當然相應的聯動部件需要先設定好,比如引起DMA操作,AD轉換等; 


通常一箇中斷服務程式對應一箇中斷事件,但有些cpu設計,可以一箇中斷服務程式對應幾個中斷事件(實際上,是一箇中斷入口,對應若干中斷訊號或稱中斷源)

這張圖是一條外部中斷線或外部事件線的示意圖,圖中訊號線上劃有一條斜線,旁邊標誌19字樣的註釋,表示這樣的線路共有19套.圖中的藍色虛線箭頭,標出了外部中斷訊號的傳輸路徑,首先外部訊號從編號1的晶片管腳進入,經過編號2的邊沿檢測電路,通過編號3的或門進入中斷掛起請求暫存器,最後經過編號4的與門輸出到NVIC中斷檢測電路,這個邊沿檢測電路受上升沿或下降沿選擇暫存器控制,使用者可以使用這兩個暫存器控制需要哪一個邊沿產生中斷,因為選擇上升沿或下降沿是分別受2個平行的暫存器控制,所以使用者可以同時選擇上升沿或下降沿,而如果只有一個暫存器控制,那麼只能選擇一個邊沿了.

按下來是編號3的或門,這個或門的另一個輸入是軟體中斷/事件暫存器,從這裡可以看出,軟體可以優先於外部訊號請求一箇中斷或事件,即當軟體中斷/事件暫存器的對應位為"1"時,不管外部訊號如何,編號3的或門都會輸出有效訊號.

一箇中斷或事件請求訊號經過編號3的或門後,進入掛起請求暫存器,到此之前,中斷和事件的訊號傳輸通路都是一致的,也就是說,掛起請求暫存器中記錄了外部訊號的電平變化.

外部請求訊號最後經過編號4的與門,向NVIC中斷控制器發出一箇中斷請求,如果中斷遮蔽暫存器的對應位為"0",則該請求訊號不能傳輸到與門的另一端,實現了中斷的遮蔽.

明白了外部中斷的請求機制,就很容易理解事件的請求機制了.圖中紅色虛線箭頭,標出了外部事件訊號的傳輸路徑,外部請求訊號經過編號3的或門後,進入編號5的與門,這個與門的作用與編號4的與門類似,用於引入事件遮蔽暫存器的控制;最後脈衝發生器的一個跳變的訊號轉變為一個單脈衝,輸出到晶片中的其它功能模組.從這張圖上我們也可以知道,從外部激勵訊號來看,中斷和事件的產生源都可以是一樣的.之所以分成2個部分,由於中斷是需要CPU參與的,需要軟體的中斷服務函式才能完成中斷後產生的結果;但是事件,是靠脈衝發生器產生一個脈衝,進而由硬體自動完成這個事件產生的結果,當然相應的聯動部件需要先設定好,比如引起DMA操作,AD轉換等;


簡單舉例:外部I/O觸發AD轉換,來測量外部物品的重量;如果使用傳統的中斷通道,需要I/O觸發產生外部中斷,外部中斷服務程式啟動AD轉換,AD轉換完成中斷服務程式提交最後結果;要是使用事件通道,I/O觸發產生事件,然後聯動觸發AD轉換,AD轉換完成中斷服務程式提交最後結果;相比之下,後者不要軟體參與AD觸發,並且響應速度也更塊;要是使用事件觸發DMA操作,就完全不用軟體參與就可以完成某些聯動任務了。

總結:

中斷請求:當產生中斷的時候,會執行對應的中斷處理程式

事件請求:當產生事件的時候,會想向其他模組傳送觸發訊號,對於其他模組如何處理這個訊號,則由模組自己決定!

可以這樣簡單的認為,事件機制提供了一個完全有硬體自動完成的觸發到產生結果的通道,不要軟體的參與,降低了CPU的負荷,節省了中斷資源,提高了響應速度(硬體總快於軟體),是利用硬體來提升CPU晶片處理事件能力的一個有效方法;