最近在專案中處理多個中斷事件的時候遇到了一些問題,後來發現是因為自己沒有對 nvic 的知識理解透徹,導致配置 nvic 的時候出現了問題,在網上學習的過程中發現不少文章都是介紹nvic的配置,並沒有深入介紹nvic。這裡就自己對於nvic學習後的理解做乙個分析總結。
nvic,全稱為nest vector interrupt controller, 直譯過來為巢狀中斷向量控制器,用於中斷巢狀的管理,降低中斷延遲時間並且能更加高效處理後續中斷。簡單說來就是給不同的中斷源分配不同的中斷優先順序,優先順序越高,『權利』越大。stm32優先順序由分為先佔優先順序(主 優先順序,搶占優先順序)和從優先順序。先佔優先順序高的中斷可以打斷先佔優先順序較低的中斷執行過程,即中斷巢狀。先佔優先順序相同則相互不能巢狀,但是當同一時刻兩個不同的中斷源發生請求時,cpu會先處理從優先順序高的中斷事件。
舉個例子
1:在學校裡面,你正在幫班長(中斷源1)收同學作業(中斷請求),這時候語文老師(中斷元2)讓你擦黑板(中斷請求),你必須停下收作業這一事件立馬執行擦黑板這一指令,因為語文老師的『權利』更大。在這個比喻當中,其實你就是cpu,收作業和擦黑板都是優先順序不同的中斷源(班長和語文老師)發出的中斷請求,高優先順序的中斷可以打斷正在執行的低優先順序中斷事件,稱之為中斷巢狀。
2:你正在幫你女朋友輔導作業的過程中突然你死黨也讓你去幫他輔導作業,你是乙個有原則的人(先佔優先順序相同),所以你會處理完手頭的事 即幫你女朋友把問題解決了再去幫你死黨輔導。但是如果你正在休息的時候你女朋友和你死黨同時讓你幫他們輔導作業(不可以同時進行),女朋友更重要(女朋友從優先順序高於死黨從優先順序),你當然是先幫你女朋友解決問題,完了之後再去幫你死黨啦。
下面來看nvic配置的例項
void nvic_configuration(void)
stm32中指定優先順序的暫存器為4位,其定義如下:
第0組:先佔優先順序只能設為0,所有4位用於指定從優先順序(0~15),
第1組:最高1位用於指定先佔式優先順序(0~1),最低3位用於指定從優先順序(0~7)
第2組:最高2位用於指定先佔式優先順序(0~3),最低2位用於指定從優先順序(0~3)
第3組:最高3位用於指定先佔式優先順序(0~7),最低1位用於指定從優先順序(0~1)
第4組:所有4位用於指定先佔優先順序(0~15),從優先順序只能設為0。
我們再來分析nvic_prioritygroupconfig(nvic_prioritygroup_1)函式,其入口引數可以為:
nvic_prioritygroup_0 選擇第0組
nvic_prioritygroup_1 選擇第1組
nvic_prioritygroup_2 選擇第2組
nvic_prioritygroup_3 選擇第3組
nvic_prioritygroup_4 選擇第4組
下面舉例說明 nvic 不同優先順序對應著不同的情況。
乙個中斷源為exti0,配置其優先順序如下
void exti0_ nvic_configuration(void)
又有乙個中斷源rtc,配置其優先順序如下
void rtc_ nvic_configuration(void)
還有乙個中斷源為tim3,其配置優先順序如下
void tim3_ nvic_configuration(void)
下面分析:
exti0的先佔優先順序高於rtc和tim3的先佔優先順序(優先順序數字越小,優先順序越高),因此當cpu正在處理rtc或者tim3的中斷源的發生的事件時,如果此時exti0中斷源發出中斷請求,cpu要立即停止當前的事件轉而處理exti0發生的事件(聯想到上面你停止收作業要先擦黑板);
rtc和tim3的先佔優先順序相同(他們權利一樣大),所以當cpu正在執行rtc中斷源發生的事件的時候,這時候即使tim3中斷源發出中斷請求cpu也不會理它,而是繼續完成手頭的工作即處理完當前rtc的事件,反之也是一樣。但是如果cpu正處於空閒狀態,tim3和rtc同時發出中斷響應,由於rtc的從優先順序高於tim3的從優先順序,所以cpu會優先響應rtc中斷源的請求。
STM32之外部中斷控制
一 stm32外部中斷 1 stm32外部中斷結構圖 如上圖所示 主要包括四個環節,gpio afio exti nvic。以stm32f103ve 100腳 為例說明硬體模組的數量 gpio 80個 afio選擇通道 16個 外部中斷線exti 16 3 19個 nvic 1個 2 exti控制器...
STM32外部中斷 EXTI NVIC的理解
建於 2019年3月28日,逐步更新完善,哈 幾位前輩的參考文章,講得很好,重點理解 之前使用函式庫實現,如履霧中,走了很多彎路。然後,嘗試暫存器操作,多了n倍時間學習 路徑反而清晰起來了。f429 在核心水平上搭載了乙個異常 中斷 事件 響應系統,支援為數眾多的系統異常和外部中斷。操作步驟 主要操...
STM32外部中斷
一 基本概念 arm coetex m3核心共支援256個中斷,其中16個內部中斷,240個外部中斷和可程式設計的256級中斷優先順序的設定。stm32目前支援的中斷共84個 16個內部 68個外部 還有16級可程式設計的中斷優先順序的設定,僅使用中斷優先順序設定8bit中的高4位。stm32可支援...