娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年04月28日(星期一)

正在發生

2021年04月28日 | STM32(Cortex-M3)中NVIC(嵌套向量中斷控制)的理解

發布者:溫馨小屋 來源: eefocus關鍵字:STM32  Cortex-M3  NVIC  嵌套向量中斷控制 手機看文章 掃描二維碼
隨時隨地手機看文章

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


1. 何為占先式優先級(pre-emption priority)


高占先式優先級的中斷事件會打斷當前的主程序/中斷程序運行—搶斷式優先響應,俗稱中斷嵌套。


2. 何為副優先級(subpriority)


在占先式優先級相同的情況下,高副優先級的中斷優先被響應;


在占先式優先級相同的情況下,如果有低副優先級中斷正在執行, 高副優先級的中斷要等待已被響應的低副優先級中斷執行結束后才能得到響應—非搶斷式響應(不能嵌套)。


3. 判斷中斷是否會被響應的依據


首先是占先式優先級,其次是副優先級;


占先式優先級決定是否會有中斷嵌套;


Reset、NMI、Hard Fault 優先級為負(高于普通中斷優先級)且不可調整。


4. 優先級沖突的處理


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


當兩個中斷源的搶占式優先級相同時,這兩個中斷將沒有嵌套關系,當一個中斷到來后,如果正在處理另一個中斷,這個后到來的中斷就要等到前一個中斷處理完之后才能被處理。如果這兩個中斷同時到達,則中斷控制器根據他們的響應優先級高低來決定先處理哪一個;如果他們的搶占式優先級和響應優先級都相等,則根據他們在中斷表中的排位順序決定先處理哪一個。


5. Cortex-M3中對中斷優先級的定義


既然每個中斷源都需要被指定這兩種優先級,就需要有相應的寄存器位記錄每個中斷的優先級;在Cortex-M3中定義了8個比特位用于設置中斷源的優先級,這8個比特位可以有8種分配方式,如下:


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

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

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

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

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

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

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

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


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


6. stm32中對中斷優先級的定義


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


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

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

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

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

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



AIRC(Application Interrupt and Reset Register)寄存器中有用于指定優先級的 4 bits。這4個bits用于分配preemption優先級和sub優先級,在STM32的固件庫中定義如下:


/* Preemption Priority Group */

#define NVIC_PriorityGroup_0 ((u32)0x700) /* 0 bits for pre-emption priority

4 bits for subpriority */

#define NVIC_PriorityGroup_1 ((u32)0x600) /* 1 bits for pre-emption priority

3 bits for subpriority */

#define NVIC_PriorityGroup_2 ((u32)0x500) /* 2 bits for pre-emption priority

2 bits for subpriority */

#define NVIC_PriorityGroup_3 ((u32)0x400) /* 3 bits for pre-emption priority

1 bits for subpriority */

#define NVIC_PriorityGroup_4 ((u32)0x300) /* 4 bits for pre-emption priority

0 bits for subpriority */



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


NVIC_PriorityGroup_0 => 選擇第0組

NVIC_PriorityGroup_1 => 選擇第1組

NVIC_PriorityGroup_2 => 選擇第2組

NVIC_PriorityGroup_3 => 選擇第3組

NVIC_PriorityGroup_4 => 選擇第4組


接下來就是指定中斷源的優先級,下面以一個簡單的例子說明如何指定中斷源的搶占式優先級和響應優先級:


// 選擇使用優先級分組第1組

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);


// 使能EXTI0中斷

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 指定搶占式優先級別1


NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定響應優先級別0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);


// 使能EXTI9_5中斷

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定搶占式優先級別0

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定響應優先級別1

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);



--------------------------------------------------------------------------------


要注意的幾點是:


1. 如果指定的搶占式優先級別或響應優先級別超出了選定的優先級分組所限定的范圍,將可能得到意想不到的結果;


2. 搶占式優先級別相同的中斷源之間沒有嵌套關系;


3. 如果某個中斷源被指定為某個搶占式優先級別,又沒有其它中斷源處于同一個搶占式優先級別,則可以為這個中斷源指定任意有效的響應優先級別。


二、開關總中斷


在STM32/Cortex-M3中是通過改變CPU的當前優先級來允許或禁止中斷。


PRIMASK位:只允許NMI和hard fault異常,其他中斷/異常都被屏蔽(當前CPU優先級=0)。

FAULTMASK位:只允許NMI,其他所有中斷/異常都被屏蔽(當前CPU優先級=-1)。


在STM32固件庫中(stm32f10x_nvic.c和stm32f10x_nvic.h) 定義了四個函數操作PRIMASK位和FAULTMASK位,改變CPU的當前優先級,從而達到控制所有中斷的目的。


下面兩個函數等效于關閉總中斷:

void NVIC_SETPRIMASK(void);

void NVIC_SETFAULTMASK(void);


下面兩個函數等效于開放總中斷:

void NVIC_RESETPRIMASK(void);

void NVIC_RESETFAULTMASK(void);


上面兩組函數要成對使用,但不能交叉使用。


例如:


第一種方法:

NVIC_SETPRIMASK(); //關閉總中斷

NVIC_RESETPRIMASK();//開放總中斷


第二種方法:

NVIC_SETFAULTMASK(); //關閉總中斷

NVIC_RESETFAULTMASK();//開放總中斷


常常使用:

NVIC_SETPRIMASK(); // Disable Interrupts

NVIC_RESETPRIMASK(); // Enable Interrupts


-------------------------------------------------------------------------------------------------

補充:

可以用:

#define CLI() __set_PRIMASK(1)

#define SEI() __set_PRIMASK(0)

來實現開關總中斷的功能。


關鍵字:STM32  Cortex-M3  NVIC  嵌套向量中斷控制 引用地址:STM32(Cortex-M3)中NVIC(嵌套向量中斷控制)的理解

上一篇:關于STM32與SD卡通信的一些思考與總結
下一篇:STM32 GPIO BRR和BSRR寄存器

推薦閱讀

集微網消息,據科技博客 AppleInsider 報道,三星電子、SK 海力士以及美光科技又遇到了一樁集體訴訟,被指控串謀限制 DRAM 內存芯片供應,從而人為地將零售價格保持在高位。據悉,這起集體訴訟面向在 2016 年 7 月 1 日至 2018 年 2 月 1 日購買并使用 DRAM 芯片設備的所有美國消費者,包括 Mac、iPad 以及 iPhone。律師事務所 Hag...
背景柔性電子,是近年來非常熱門的一項新興技術。不同于傳統電子器件給我們帶來的僵硬呆板的印象,柔性電子產品能在一定范圍的形變(彎曲、折疊、扭轉、壓縮或拉伸)條件下正常工作。(圖片來源:美國國家科學基金會)目前,柔性電子已經成為交叉學科中的研究熱點之一,它涵蓋有機電子、塑料電子、生物電子、納米電子、印刷電子等領域,其產品包括RFID、柔...
S32DS中編譯生成MPC5744P項目時,默認只生成elf文件,elf文件包含眾多調試信息,因而相較于hex文件,體積要大得多,而且需要另外開發elf解析模塊,不如hex通用。設置生成Hex的方法如下:1、項目中右鍵->Properties2、在C/C++ Build -> Setting -> Build Steps -> Post-build steps -> Command: 中輸入:powerpc-eabivle-objcopy -O ihex ${...
AECA比較完整的數據出來了,我們可以細致的看一下歐洲的情況。2021年第一季度,歐洲新車注冊量同比上漲0.9%至308萬輛。傳統動力方面,柴油銷量與去年同期相比下降了20.1%,歐盟銷量為59.35萬臺,市場份額為23.2%(2020年Q1為29.9%)。汽油車的需求繼續呈下降趨勢,銷量從2020年Q1的130萬輛下降了16.9%,2021年Q1為110萬輛(市場份額從52.3%下降到42.2...

史海拾趣

問答坊 | AI 解惑

單片機最小系統

本帖最后由 paulhyde 于 2014-9-15 09:20 編輯 一般競賽都用什么單片機最小系統?51單片機還是msp430?51是at89s51還是89c51?兩個有什么區別嗎?  …

查看全部問答∨

做PCB設計的不久以后就要下崗了

索尼公司今天宣布,已經成功開發出“全球首個毫米波內部連接無線技術”,可在電視機等電子設備中用高 速無線連接,替代電路板上的有線連接,降低芯片和其他零部件尺寸和成本,從而令最終產品更加輕薄、可靠而廉價。當今的各種電子設備功能越來越強 ...…

查看全部問答∨

Windows CEnet的智能移動信息終端設計.pdf

Windows CEnet的智能移動信息終端設計.pdf…

查看全部問答∨

關于串口驅動

個人理解 微軟顯示串口驅動的MDD層 自己要實現PDD層 今天在PB5.0下看到這個 D:\\WINCE500\\PUBLIC\\COMMON\\OAK\\DRIVERS\\SERIAL中有一個SERPDDCM文件夾 看名字好像是串口驅動的PDD 想問下這是個什么東西 如果是PDD 那寫串口驅動還需要做些什么 ...…

查看全部問答∨

【參與有分】EBoot升級Image時會用到帶有"N000FF"的Image文件,這種文件怎么得到?

**************************問題描述******************************* 使用MS的EBoot升級Image的時候,代碼上依次會走下面的流程:     OEMPlatformInit( )----初始化板上設備(初始化顯示、RTC、OAL與eboot共享參數、打印用戶菜單、網 ...…

查看全部問答∨

關于驅動安裝成功后出現的未知設備問題

目前開發完一個針對philips saa7130的視頻采集驅動,安裝完后,系統提示出現“未知設備”,但卡的驅動已經成功裝上。分析后發現“未知設備”是saa7130芯片支持的TV tuner,但目前我們的用戶不需要該功能,所以想在裝上驅動后,不再出現提示用戶安裝 ...…

查看全部問答∨

ucos-ii任務劃分設計

比較詳盡的介紹如何對基于ucos-ii的系統中進行任務的劃分…

查看全部問答∨

俺的C習題(7)——這其實也是個沒啥技術含量的

如題,沒啥技術含量,不過,我記得我最初對這個題目很是蛋疼。為何?全在于理解上出了問題。我以為,這個題的奧義是要實現在一組元素上任意順序的四則運算符。不過這也不難,當時我考慮的方法是。做一個和數據元素一樣長或者小一個單位的數組,用來 ...…

查看全部問答∨

LPC9221 io口設置與使用

我有個nxp p89lpc9221芯片,用來控制7段數碼管顯示,用ICP口編程。 我現在設置p0.0,p0.1,p0.2為開漏輸出;P0M1 |= 0x07;   P0M2 |= 0x07; 三個腳都上拉到3.3v; 然后設置三個腳輸出為0: sbit p00 = P0 ^ 0; sbit p01 = P0 ^ 1; sbit ...…

查看全部問答∨

幫看看串口通信用不了

//用的是STM32F107VCT  25MHz的外部晶振 //固件庫是V3.5的 //想實現串口通信(USART2),卻怎么也發不出去數據,求看看是哪里出錯了,我新手。。。謝謝啦! #include "stm32f10x.h" void RCC_Configuration(void); void GPI ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 蓝田县| 新闻| 马龙县| 溆浦县| 海城市| 崇阳县| 浪卡子县| 陕西省| 九江县| 钟山县| 禄丰县| 伊宁县| 资溪县| 金塔县| 阿巴嘎旗| 安义县| 台江县| 黎平县| 宝丰县| 新泰市| 西昌市| 白玉县| 小金县| 应用必备| 大名县| 连山| 伊吾县| 贵阳市| 依安县| 怀宁县| 高平市| 中卫市| 闽侯县| 黎城县| 仁化县| 通州市| 晋中市| 渝北区| 吉安市| 五台县| 五莲县|