stm32 中斷處理級別_STM32中斷優先級徹底講解

文章來源:http://blog.sina.com.cn/s/blog_4fed55ce0100j7nd.html

一:綜述

STM32 目前支持的中斷共為 84 個(16 個內核+68 個外部), 16 級可編程中斷優先級

的設置(僅使用中斷優先級設置 8bit 中的高 4 位)和16個搶占優先級(因為搶占優先級最多可以有四位數)。

二:優先級判斷

STM32(Cortex-M3)中有兩個優先級的概念——搶占式優先級和響應優先級,有人把響應優先級稱作'亞優先級'或'副優先級',每個中斷源都需要被指定這兩種優先級。

具有高搶占式優先級的中斷可以在具有低搶占式優先級的中斷處理過程中被響應,即中斷嵌套,或者說高搶占式優先級的中斷可以嵌套低搶占式優先級的中斷。

當兩個中斷源的搶占式優先級相同時,這兩個中斷將沒有嵌套關系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先級高低來決定先處理哪一個;如果他們的搶占式優先級和響應優先級都相等,則根據他們在中斷表中的排位順序決定先處理哪一個。三:優先級分組既然每個中斷源都需要被指定這兩種優先級,就需要有相應的寄存器位記錄每個中斷的優先級;在Cortex-M3中定義了8個比特位用于設置中斷源的優先級,這8個比特位在NVIC應用中斷與復位控制寄叢器(AIRCR)的中斷優先級分組域中,可以有8種分配方式,如下:

所有8位用于指定響應優先級

最高1位用于指定搶占式優先級,最低7位用于指定響應優先級

最高2位用于指定搶占式優先級,最低6位用于指定響應優先級

最高3位用于指定搶占式優先級,最低5位用于指定響應優先級

最高4位用于指定搶占式優先級,最低4位用于指定響應優先級

最高5位用于指定搶占式優先級,最低3位用于指定響應優先級

最高6位用于指定搶占式優先級,最低2位用于指定響應優先級

最高7位用于指定搶占式優先級,最低1位用于指定響應優先級

這就是優先級分組的概念。

Cortex-M3允許具有較少中斷源時使用較少的寄存器位指定中斷源的優先級,因此STM32把指定中斷優先級的寄存器位減少到4位(AIRCR高四位),這4個寄存器位的分組方式如下:

第0組:所有4位用于指定響應優先級

第1組:最高1位用于指定搶占式優先級,最低3位用于指定響應優先級

第2組:最高2位用于指定搶占式優先級,最低2位用于指定響應優先級

第3組:最高3位用于指定搶占式優先級,最低1位用于指定響應優先級

第4組:所有4位用于指定搶占式優先級

可以通過調用STM32的固件庫中的函數NVIC_PriorityGroupConfig()選擇使用哪種優先級分組方式,這個函數的參數有下列5種:

NVIC_PriorityGroup_0 => 選擇第0組

NVIC_PriorityGroup_1 => 選擇第1組

NVIC_PriorityGroup_2 => 選擇第2組

NVIC_PriorityGroup_3 => 選擇第3組

NVIC_PriorityGroup_4 => 選擇第4組

中斷優先級分組是為了給搶占式優先級和響應優先級在中斷優先級寄叢器的高四位分配各個優先級數字所占的位數。在一個程序中只能設定一次

四:中斷源的優先級

接下來就是指定中斷源的優先級,中斷源優先級是在中斷優先級寄存器中設置的,只能設置及高四位,必須根據中斷優先級分組中設置好的位數來在該寄存器中設置相應的數值。假如你選擇中斷優先級分組的第3組:最高3位用于指定搶占式優先級,最低1位用于指定響應優先級,那么搶占式優先級就有000-111共八種數據選擇,也就是有八個中斷嵌套,而響應優先級中有0和1兩種,總共有8*2=16種優先級。

中斷源優先級具體的設置了該中斷源的優先級別

在一個程序中可以設定多個(最多16個)優先級,每個中斷源只能設定的一個。

每寫一個關于中斷優先級的程序必須包含下列兩個函數:

(1)void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)中斷分組設置

(2)void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)中斷優先級設置

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275925.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

胖子臉:庫珀·布萊克100年

In 16th century Europe, roman typefaces were the first to surpass blackletter as the preferred choice for expressing emphasis in print. True bold weight roman letters didn’t appear until the 19th century, which critics quickly coined “Fat Faces” due to …

C語言中的布爾值

C語言的布爾類型在C語言標準(C89)沒有定義布爾類型,所以C語言判斷真假時以0為假,非0為真。所以我們通常使用邏輯變量的做法: //定義一個int類型變量,當變量值為0時表示false,值為1時表示trueint flag;flag 0;//......…

用委托實現窗體間傳值

1.新建一個工程.在Form1中添加一個Label和一個Button.新建一個事件類,讓它有一個string 類型的屬性,用于傳值. 1 ///ReturnValueEventArgs.cs 2 using System; 3 using System.Collections.Generic; 4 using System.Text; 5 6 namespace test 7 { 8 public class Return…

c++ explicit關鍵字_聊一聊 C++的特性 explicit 匿名空間

聊一聊 C的特性 explicit && 匿名空間explicit關鍵字首先看一下explicit的作用:explicit 是避免構造函數的參數自動轉換為類對象的標識符,平時代碼中并不是經常用到,但是,有時候就是因為這個,會造成一定的BUG出…

谷歌瀏覽器那些有趣的隱藏功能

大家好,我是若川(點這里加我微信 ruochuan12,長期交流學習)。今天推薦一篇實用文章。文末有抽獎。點擊下方卡片關注我、加個星標,或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列很多小伙伴說還是…

AppDelegate的模塊化+瘦身

前言 關于iOS的模塊化,要追溯到16年接觸的BeeHive了,BeeHive將功能模塊化,以module的形式進行構建,以performSelector:的形式進行module的事件響應,以protocol的形式進行module間的通信。可以說思路非常清晰…

yii mysql_Yii2框架操作數據庫的方法分析【以mysql為例】

本文實例講述了Yii2框架操作數據庫的方法。分享給大家供大家參考,具體如下:準備數據庫DROP TABLE IF EXISTS pre_user;CREATE TABLE pre_user(id int(11) AUTO_INCREMENT PRIMARY KEY,username varchar(255) NOT NULL,password varchar(32) NOT NULL DEF…

C++接口注意

1. 用Record接口,要注意 Packed的區別 2. cdecl和stdcall的區別 3. C導出的函數建議用C格式stdcall導出,使用Def文件定義名稱 4. 用VS寫的API dll要注意是否引用了MFC的DLL,否則會使LoadLibrary失敗,并GetLastError后返回14001 Ap…

Vue 3.1.0 的 beta 版發布

大家好,我是若川(點這里加我微信 ruochuan12,長期交流學習)。昨晚尤大視頻號直播說到vue 3.1.0 beta版發布了,今天分享這篇文章。也有小伙伴可能注意到了昨晚我一直在送禮物。點擊下方卡片關注我、加個星標&#xff0c…

設計模式練習_設計練習是邪惡的

設計模式練習It was the final round of interviews. Or, so the candidate thought.這是采訪的最后一輪。 或者,所以候選人認為。 She’d spent all day interviewing in our office. As the final interviewer, I walked her out the building. She seemed confi…

morningcat2018 LearningDocs

2019獨角獸企業重金招聘Python工程師標準>>> LearningDocs 學習資料與文檔 JCP(Java Community Process ,Java社區進程 ) https://www.jcp.org/en/home/index JSR(Java Specification Requests,Java規范請求…

firefox下可惡的value

前幾天做項目 遇到這樣一個情況 document.getElementById("txtTest").value "111"; 這條語句在ff下和ie下都是好用的 但是用開發工具看html代碼 ie下顯示正常 ff下顯示的卻是修改之前的(實際上已經修改了,只是html沒有修改過來) 用js修改input…

據說 99% 的人不知道 vue-devtools 還能直接打開對應組件文件?本文原理揭秘

1. 前言你好,我是若川[1],微信搜索「若川視野」關注我,專注前端技術分享,一個愿景是幫助5年內前端開闊視野走向前列的公眾號。歡迎加我微信ruochuan12,長期交流學習。這是學習源碼整體架構系列 之 launch-editor 源碼&…

mysql 存儲 事務_MYSQL 可以在存儲過程里實現事務控制嗎

展開全部6.7 MySQL 事務與鎖定命令6.7.1 BEGIN/COMMIT/ROLLBACK 句法缺省的,MySQL 運行在 autocommit 模式。這就意味著,當你執行完一e69da5e887aa62616964757a686964616f31333361326265個更新時,MySQL 將立刻將更新存儲到磁盤上。如果你使用…

如何忽略證書繼續訪問_前5個最容易被忽視的可訪問性問題

如何忽略證書繼續訪問Accessibility is quickly becoming one of the most important aspects of the way we use the web, if not the most important. Just between 2017 and 2018, the number of federal court cases regarding web accessibility nearly tripled, signifyi…

《認清C++語言》のrandom_shuffle()和transform()算法

1&#xff09;STL中的函數random_shuffle()用來對一個元素序列進行重新排序&#xff08;隨機的&#xff09;&#xff0c;函數原型如下&#xff1a; template<class RandomAccessIterator> void random_shuffle( RandomAccessIterator _First, //指向序列首元素的迭代器 R…

作為前端開發,如何高效學習 TypeScript

大家好&#xff0c;我是若川。有朋友跟我說最近面試前端候選人&#xff0c;問到關于 JavaScript 的一些少見誤區問題&#xff0c;候選人很多都沒回答上來&#xff0c;他很詫異&#xff0c;一個從國際大廠出來的面試者&#xff0c;竟然對 JavaScript 的一些誤區問題都不了解。他…

figma下載_對于這10家公司,Figma是邁向新高度的起點

figma下載Hey everyone! In this post, we are highlighting 10 companies for which the use of Figma has become the starting point on the path to new heights. These are the use cases of problems and their solutions, where Figma played a decisive role.嘿大家&am…

mysql查詢條件為or_使用mysql查詢where條件里的or和and

為什么要著重講這塊內容呢?因為好多小伙伴都會混淆&#xff0c;要不就是不知道怎么組合使用&#xff0c;今天就給大家講這部分內容干貨&#xff0c;讓大家半分鐘看懂。AND、OR運算符的組合使用在WHERE子句中&#xff0c;通過AND、OR運算符可以同時連接多個條件&#xff0c;當然…

sql server(常用)

普通用法 //生成 uuid 并轉為小寫 select LOWER(SUBSTRING(uuid,1,8)-SUBSTRING(uuid,10,4)-SUBSTRING(uuid,15,4)-SUBSTRING(uuid,20,4)-SUBSTRING(uuid,25,12)) from (select cast(NEWID() as varchar(36)) as uuid) s //ea52a7bb-a2aa-44b8-be28-5ebc64defcf9//獲取時分秒…