天天看點

STM32中斷(EXIT)筆記記錄

STM32中斷(EXIT)筆記記錄

    EXTI 可分為兩大部分功能,一個是産生中斷,另一個是産生事件,這兩個功能從硬體上就有所

不同。

        首先我們來看圖 EXTI 功能框圖 中紅色虛線訓示的電路流程。它是一個産生中斷的線路,最終信号流入到 NVIC 控制器内。編号 1 是輸入線,EXTI 控制器有 19 個中斷/事件輸入線,這些輸入線可以通過寄存器設定為任意一個 GPIO,也可以是一些外設的事件,這部分内容我們将在後面專門講解。輸入線一般是存在電平變化的信号。

        編号 2 是一個邊沿檢測電路,它會根據上升沿觸發選擇寄存器 (EXTI_RTSR) 和下降沿觸發選擇寄存器 (EXTI_FTSR) 對應位的設定來控制信号觸發。邊沿檢測電路以輸入線作為信号輸入端,如果檢測到有邊沿跳變就輸出有效信号 1 給編号 3 電路,否則輸出無效信号 0。而 EXTI_RTSR 和EXTI_FTSR 兩個寄存器可以控制器需要檢測哪些類型的電平跳變過程,可以是隻有上升沿觸發、

隻有下降沿觸發或者上升沿和下降沿都觸發。

        編号 3 電路實際就是一個或門電路,它一個輸入來自編号 2 電路,另外一個輸入來自軟體中斷事件寄存器 (EXTI_SWIER)。EXTI_SWIER 允許我們通過程式控制就可以啟動中斷/事件線,這在某些地方非常有用。我們知道或門的作用就是有 1 就為 1,是以這兩個輸入随便一個有有效信号 1就可以輸出 1 給編号 4 和編号 6 電路。編号 4 電路是一個與門電路,它一個輸入是編号 3 電路,另外一個輸入來自中斷屏蔽寄存器(EXTI_IMR)。與門電路要求輸入都為 1 才輸出 1,導緻的結果是如果 EXTI_IMR 設定為 0 時,那不管編号 3 電路的輸出信号是 1 還是 0,最終編号 4 電路輸出的信号都為 0;如果 EXTI_IMR設定為 1 時,最終編号 4 電路輸出的信号才由編号 3 電路的輸出信号決定,這樣我們可以簡單的控制 EXTI_IMR 來實作是否産生中斷的目的。編号 4 電路輸出的信号會被儲存到挂起寄存器(EXTI_PR) 内,如果确定編号 4 電路輸出為 1 就會把 EXTI_PR 對應位置 1。編号 5 是将 EXTI_PR 寄存器内容輸出到 NVIC 内,進而實作系統中斷事件控制。

接下來我們來看看綠色虛線訓示的電路流程。它是一個産生事件的線路,最終輸出一個脈沖信

号。

        産生事件線路是在編号 3 電路之後與中斷線路有所不同,之前電路都是共用的。編号 6 電路是一個與門,它一個輸入來自編号 3 電路,另外一個輸入來自事件屏蔽寄存器 (EXTI_EMR)。如果

EXTI_EMR 設定為 0 時,那不管編号 3 電路的輸出信号是 1 還是 0,最終編号 6 電路輸出的信号

都為 0;如果 EXTI_EMR 設定為 1 時,最終編号 6 電路輸出的信号才由編号 3 電路的輸出信号決

定,這樣我們可以簡單的控制 EXTI_EMR 來實作是否産生事件的目的。

        編号 7 是一個脈沖發生器電路,當它的輸入端,即編号 6 電路的輸出端,是一個有效信号 1 時就會産生一個脈沖;如果輸入端是無效信号就不會輸出脈沖。

        編号 8 是一個脈沖信号,就是産生事件的線路最終的産物,這個脈沖信号可以給其他外設電路使用,比如定時器 TIM、模拟數字轉換器 ADC 等等,這樣的脈沖信号一般用來觸發 TIM 或者 ADC開始轉換。

        簡單來說産生中斷線路目的是把輸入信号輸入到 NVIC,進一步會運作中斷服務函數,實作功能,這樣是軟體級的。而産生事件線路目的就是傳輸一個脈沖信号給其他外設使用,并且是電路級别的信号傳輸,屬于硬體級的。

繼續閱讀