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

stm32的中斷分為 1.搶占優先級。 2.子優先級。


1.搶占優先級。搶占優先級高的中斷,可以打斷搶占優先級低的中斷。


2.子優先級。搶占優先級相同的中斷,子優先級高的可以優先執行。


其實,子優先級主要給出了一種響應的優先隊列。假設中斷的搶占優先級都相同。如果有多個相同搶占優先級的中斷來了 ,那么他們不會互相打斷,但是他們后續的排隊會按照子優先級排隊。也就是說,在第一個中斷沒有執行完的期間內,后續的最高級的子優先級是被安排到最高等待位處理的。


NVIC設置流程:


定義NVIC初始化結構體;

配置優先級分組;

往NVIC初始化結構體中填充,如中斷源,搶占優先級,子優先級,使能等;

調用NVIC初始化函數;

編寫中斷服務函數;

static void EXTI_NVIC_Config(void)

{

    NVIC_InitTypeDef NVIC_InitStruct;

 

    // 先設置中斷優先級分組

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStruct);

}

 

void EXTI0_IRQHandler(void)

{

// 判斷是否發生中斷

// 與函數FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line);功能相同

if (EXTI_GetITStatus(EXTI_Line0) != RESET)

{

LED_R_TOGGLE;

}

// 清除標志位,往EXTI_PR寄存器寫1,與函數void EXTI_ClearFlag(uint32_t EXTI_Line)功能相同

// 之所有一個功能有兩個一樣的函數,是為了兼容舊的固件

EXTI_ClearITPendingBit(EXTI_Line0);

}


stm32的中斷可以分為系統異常10個(內核)和外部中斷60個(外設)。NVIC是內核的外設,管理包括內核和片上外設所有的中斷功能,在core_cm3.h和misc.h中。


NVIC的寄存器描述:

ISER:中斷使能寄存器,對應60個外設的不可屏蔽中斷,其中NVIC_ISER0的0~31位對應著中斷向量表中的編號0~31,NVIC_ISER1對應著32~63,ISER2對應剩余位,其中還存在一些保留位,要想開啟特定的中斷,設置特定的位就可以。


ICER:中斷清除寄存器,對應60個外設的不可屏蔽中斷。與ISER類似,要想清除特定的中斷,設置特定的位就可以。


ISPR:中斷掛起寄存器,可掛起正在執行的中斷,設置特定位。當置位此寄存器時,這個中斷不會立即執行,而是等待可執行的時候再執行;比如高低級別的中斷同時產生,CPU會自然的將低級別的中斷掛起,當高優先級中斷執行完畢后,再去處理低優先級中斷,這個時候需要清除掛起位(使用ICPR),然后執行低級別中斷。


ICPR:中斷解除掛起寄存器,可以解除被掛起的中斷。


IABR:中斷激活標志寄存器(只讀),可讀取該寄存器判斷當前執行的中斷是哪個,中斷執行完硬件清零。


IPR:中斷優先級寄存器,用于中斷分組。


STIR:軟件觸發中斷寄存器,用于系統任務調度,編寫SDK(不讓別人看到代碼)。


core_cm3.h中的NVIC結構體:


typedef struct

{

    __IO uint32_t ISER[8];                      /*!< Offset: 0x000  Interrupt Set Enable Register           */

    uint32_t RESERVED0[24];

    __IO uint32_t ICER[8];                      /*!< Offset: 0x080  Interrupt Clear Enable Register         */

    uint32_t RSERVED1[24];

    __IO uint32_t ISPR[8];                      /*!< Offset: 0x100  Interrupt Set Pending Register          */

    uint32_t RESERVED2[24];

    __IO uint32_t ICPR[8];                      /*!< Offset: 0x180  Interrupt Clear Pending Register        */

    uint32_t RESERVED3[24];

    __IO uint32_t IABR[8];                      /*!< Offset: 0x200  Interrupt Active bit Register           */

    uint32_t RESERVED4[56];

    __IO uint8_t  IP[240];                      /*!< Offset: 0x300  Interrupt Priority Register (8Bit wide) */

    uint32_t RESERVED5[644];

    __O  uint32_t STIR;                         /*!< Offset: 0xE00  Software Trigger Interrupt Register     */

}  NVIC_Type;


stm32設計了8個ISER寄存器,實際上只用到其中的3個,之所以設計這么多組,是為了后續內核和外設資源的升級來考慮的,中間有24個保留地址,總共是32個32位地址,所以ICER的偏移地址為0X80(每4個地址增加0X10),以此類推。

值得注意的是,設置中斷優先級的寄存器是8位有效(ARM規定),實際上stm32只使用了高4位,忽略低4位。但是中斷優先級寄存器IPR是32位的,因此,每8位寄存器為一個優先級數組IP,每個IPR寄存器表示4個IP優先級分組,如下圖:

misc.h中實現了NVIC所有的功能函數:


// 優先級分組

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

// NVIC初始化

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);

// 設置中斷向量表

void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);

// 設置系統進入低功耗模式

void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);

// 設置內核時鐘來源,72M或72M/8=9M(8分頻)

void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);

NVIC初始化結構體


/** 

  * @brief  NVIC Init Structure definition  

  */

 

typedef struct

{

  uint8_t NVIC_IRQChannel;                    /*!< Specifies the IRQ channel to be enabled or disabled.

                                                   This parameter can be a value of @ref IRQn_Type 

                                                   (For the complete STM32 Devices IRQ Channels list, please

                                                    refer to stm32f10x.h file) */

 

  uint8_t NVIC_IRQChannelPreemptionPriority;  /*!< Specifies the pre-emption priority for the IRQ channel

                                                   specified in NVIC_IRQChannel. This parameter can be a value

                                                   between 0 and 15 as described in the table @ref NVIC_Priority_Table */

 

  uint8_t NVIC_IRQChannelSubPriority;         /*!< Specifies the subpriority level for the IRQ channel specified

                                                   in NVIC_IRQChannel. This parameter can be a value

                                                   between 0 and 15 as described in the table @ref NVIC_Priority_Table */

 

  FunctionalState NVIC_IRQChannelCmd;         /*!< Specifies whether the IRQ channel defined in NVIC_IRQChannel

                                                   will be enabled or disabled. 

                                                   This parameter can be set either to ENABLE or DISABLE */   

} NVIC_InitTypeDef;

 

/**

  * @}

  */

 

/** @defgroup NVIC_Priority_Table 

  * @{

  */

 

/**

@code  

 The table below gives the allowed values of the pre-emption priority and subpriority according

 to the Priority Grouping configuration performed by NVIC_PriorityGroupConfig function

  ============================================================================================================================

    NVIC_PriorityGroup   | NVIC_IRQChannelPreemptionPriority | NVIC_IRQChannelSubPriority  | Description

  ============================================================================================================================

   NVIC_PriorityGroup_0  |                0                  |            0-15             |   0 bits for pre-emption priority

                         |                                   |                             |   4 bits for subpriority

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

   NVIC_PriorityGroup_1  |                0-1                |            0-7              |   1 bits for pre-emption priority

                         |                                   |                             |   3 bits for subpriority

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

   NVIC_PriorityGroup_2  |                0-3                |            0-3              |   2 bits for pre-emption priority

                         |                                   |                             |   2 bits for subpriority

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

   NVIC_PriorityGroup_3  |                0-7                |            0-1              |   3 bits for pre-emption priority

[1] [2]
關鍵字:stm32  中斷  NVIC 引用地址:stm32專題六:中斷 NVIC

上一篇:stm32專題五:時鐘樹(四)自定義配置HSI時鐘
下一篇:stm32專題七:EXTI(一)外部中斷/事件控制器框圖

推薦閱讀

芯科技消息,網絡時代來臨,民眾習慣利用手機登入網銀進行交易,恐出現被惡意盜領的風險。有鑒于此,JCI日本通信公司與山田電機、Cybertrust公司共同宣布,明年春天將提供一項全新的金融資安服務,提高網銀交易安全性。根據《產經新聞》指出,這項新的服務稱為「FPoS」,在智能手機原有的SIM卡,貼上一張確認本人專用的貼紙型SIM卡,只要到山田電機出示駕...
互聯網、、人工智能等技術與機器人產業加速融合,促使機器人技術及其產品也發生天翻地覆的變化。大象機器人以全新邏輯,持續在機器人算法、控制器、及產品開發方面創新和投入,布局安全機器人細分市場,以滿足市場多元化的需求。 伴隨智能化、信息化、網絡化的不斷發展,機器人技術及其產品也發生著天翻地覆的變化。在汽車行業,工業機器人一改以往固定...
2020年10月20日,于英國濱海克拉克頓鎮,擁有超過50年舌簧繼電器制造經驗且在微型和高性能繼電器研發方面處于業內領先地位的Pickering Electronics公司將參加11月3-5日在深圳國際會展中心舉辦的慕尼黑華南電子展。 Pickering公司將借此機會展出一系列微型高壓舌簧繼電器,包括119系列、104系列和新的131系列繼電器。131系列舌簧繼電器采用微型單列直插(m...
10月19日消息,2021中國汽車工程學會年會暨展覽會(SAECCE2021)于上海汽車會展中心正式開幕。據悉,SAECCE將舉辦為期三天(10月19-21日)的分享會及展覽。數千位中國工程院院士、專家學者、車企技術高管、汽車工程師等技術人員齊聚上海嘉定,以“雙碳背景下汽車科技創新”為主題,圍繞汽車電動化、智能化、網聯化、共享化的發展趨勢進行深度探討。大會現場...

史海拾趣

問答坊 | AI 解惑

請教甲機通過串口控制乙機LED閃爍試驗中的定時器有什么作用

請教甲機通過串口控制乙機LED閃爍試驗中的定時器T1有什么作用 #include <reg52.h> #define uint unsigned int #define uchar unsigned char sbit LED1 = P0^0; sbit LED2 = P0^3; sbit K1 = P1^0; void Delay(uint x) {   u ...…

查看全部問答∨

在WinCE里如何取硬盤、網卡、CPU的序列號

如題,用C#如何?。茫爬锏南嚓P序列號? 我在論壇里找了好久,但都是在Windows XP(2000)系統里的,請高人指點,或者在CE里如何用ManagementObject或MarshalAs 只要取的一個序列號即給分…

查看全部問答∨

借人氣問一下!簡單的

本人用TIMERB3每隔幾毫秒產生一個中斷,并且P2口接按鍵(F133),使用P2口中斷進行一些按鍵操作,但是現在感覺按鍵操作很偶爾的才會有反應,而且是按了很多次可能才會有一次反應。 我估計是和定時中斷產生沖突了,問可有什么解決方按?!?

查看全部問答∨

TI 電源設計小貼士 24

歡迎來到電源設計小貼士!隨著現在對更高效、更低成本電源解決方案需求的強調,我們創建了該專欄,就各種電源管理課題提出一些對您有幫助的小技巧。該專欄面向各級設計工程師。無論您是從事電源業務多年還是剛剛步入電源領域,您都可以在這里找到 ...…

查看全部問答∨

【視頻分享】DM8168高清處理解決方案ETV-HDV8168-HDMI產品介紹

基于TI(德州儀器)公司的DM8168芯片的強大處理性能,可同時進行全高清H.264編碼、解碼、圖像智能識別應用,使圖像處理真正跨入1080p 60幀全高清時代。 $(\'swf_Eic\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'al ...…

查看全部問答∨

[C/C++] 【高效c語言】(四)--switch與if的效率

switch與if的區別 如果純粹比較數字或字符,建議使用switch,因為它只會在一開始的switch括號中取出變量值一次,然后將這個值與下面所設定的case比較,但如果使用if,每次遇到條件式時,都要取出變量值,效率的差異就在這兒。例如: if(a == 1) ...…

查看全部問答∨

關于嵌入式學習的書籍推薦

一些基礎的東西學完了,如何進一步的成長,該學習哪些書呢? 如果沒有讀過計算機專業的基礎課程,那么計算機基礎課程是一定要學習的。 1.數據結構、離散數學、操作系統、編譯原理這四門課學習完。數據結構和操作系統兩門課程一定要細心學 ...…

查看全部問答∨

基于at89c51制作數字時鐘,(必須用兩個4位數碼管)求程序。電路圖。急求、

本帖最后由 害羞的小黃瓜 于 2014-5-10 10:22 編輯 。。。。求發郵箱634494591@qq.com …

查看全部問答∨

FLASH擦出問題

這個問題蹊蹺的很,肚子都嘔爆,最近好衰的樣子.... 好吧,進入正題,我的目的是擦出FLASH的infoA段全部,代碼是這樣的(和他人的都一樣的): void erase_Flash(char* add) {     while(FCTL3 & BUSY);       ...…

查看全部問答∨

有沒有這樣一種差壓式傳感器

公司讓尋找一種傳感器,要求測量水下的一種作用力,但是受到水壓的干擾作用,要將水壓干擾消除,得到可用的力作用信號。本想用惠思登電橋測量,用兩個應變片,一個測量水壓,一個測量水壓與作用力的壓力,兩個由于電橋電路直接將水壓消除掉,得到近 ...…

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 固安县| 城固县| 灌南县| 土默特左旗| 永寿县| 罗平县| 闸北区| 工布江达县| 乐都县| 盐城市| 新丰县| 无极县| 宣恩县| 台湾省| 黎平县| 右玉县| 德州市| 西平县| 芒康县| 南皮县| 凤台县| 博罗县| 望谟县| 堆龙德庆县| 德阳市| 阜康市| 汽车| 黄山市| 龙南县| 民县| 雷州市| 深圳市| 郁南县| 普兰县| 丹阳市| 开鲁县| 乡宁县| 南通市| 克山县| 容城县| 河西区|