吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是中斷架構

汽車電子技術 ? 來源:滑小稽筆記 ? 作者:電子技術園地 ? 2023-03-01 17:41 ? 次閱讀

3.1 STM32F103中斷概述

Cortex-M3內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,并且具有256級的可編程中斷設置。但STM32并沒有使用Cortex-M3內核的全部東西,而是只用了它的一部分。STM3284個中斷,包括16個內核中斷和68個可屏蔽中斷,具有16級可編程的中斷優先級。而我們常用的就是這68個可屏蔽中斷,但是STM3268個可屏蔽中斷,在STM32F103ZET6中只有60個。

3.2 STM32F103中斷優先級

3.2.1 優先級結構

STM32F103的中斷分為搶占優先級和響應優先級兩種,這兩種優先級的順序是搶占優先級高于響應優先級,假設存在兩個事件,那就會存在以下幾種可能:

(1)情況1:事件1和事件2的搶占優先級都是1,事件1的響應優先級為1,事件2的響應優先級為2,那么事件1和事件2同時發生的時候,CPU優先處理事件1,然后處理事件2;

(2)情況2:事件1和事件2的響應優先級都是1,事件1的搶占優先級為2,事件2的搶占優先級為1,那么,事件1和事件2同時發生的時候,CPU優先處理事件2,然后處理事件1;

(3)情況3:事件1的響應優先級為1,事件2的響應優先級為2,事件1的搶占優先級為2,事件2的搶占優先級為1,當事件1和事件2同時發生的時候,CPU優先處理事件2,然后處理事件1;

通過上面兩種情況,我們可以發現,當搶占優先級一致,誰的響應優先級的數小,誰的優先級就高,中斷同時發生的時候CPU就先處理誰;如果搶占優先級不一樣,那么無所謂響應優先級,誰的搶占優先級數小,優先級就高,中斷同時發生的時候CPU就先處理誰。

   STM32F103的搶占優先級和響應優先級各有4級,即0~3,根據乘法原理,也從側面反映了16級可編程的中斷優先級,并且搶占優先級和響應優先級的數量是可以設置的,通過中斷分組來配置,中斷分組和優先級數量的對應如下表所示。
搶占優先級數量 響應優先級處理
0 0 4
1 1 3
2 2 2
3 3 1
4 4 0

3.2.2 相關寄存器

(1) 中斷應用和復位控制寄存器AIRCR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
KEY[15:0]
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
END - GROUP[2:0] - REQ ACT RST

Bit 31~Bit 16:激活代碼,寫入0x05FA激活寄存器

Bit 15:指示數據的字節序(這只能在重置后更改)

0:表示小尾數

          1:表示大字節序

Bit 10~Bit 8:中斷優先級分組

Bit 2:請求芯片控制邏輯產生復位

Bit 1:清除所有活動狀態信息中的異常

Bit 0:重置Cortex-M3處理器(調試邏輯除外)

(2) 中斷使能寄存器組 :ISER

STM32中,ISER寄存器一共有3個,ISER[0]031位對應中斷0~31ISER[1]031位對應中斷32~63ISER[2]03對應中斷64~67,如果需要使能某個中斷,必須設置對應的ISER位為1,要清除的話可以設置ICER寄存器組對應位為1,或者對ISER0,但是對于ICER寄存器組寫0是不起作用的。

(3) 中斷優先級控制寄存器組 :IP

對于STM32,優先級控制寄存器IP一共有68個,對應著68個中斷,每個寄存器的結構都是相同的,如下圖所示。

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
PrePriority[1:0] SubPriority[1:0] -

Bit 7~Bit 6:搶占優先級

Bit 5~Bit 4:響應優先級

3.2.3 中斷優先級配置函數

/***************************************************
Name    :NVIC_Init
Function  :設置NVIC
Parameter  :
      PrePriority  :搶占優先級
      SubPriority  :響應優先級
      Channel    :中斷編號
      Group    :中斷分組 0~4
Return    :None
***************************************************/
void NVIC_Init( u8 PrePriority, u8 SubPriority, u8 Channel, u8 Group )
{
  u32 temp, temp1 ;
  //設置分組
  temp1 = ( ~Group )&0x07 ;                  //取后三位
  temp1 <<= 8 ;
  temp = SCB->AIRCR ;                    //讀取先前的設置
  temp &= 0x0000F8FF ;                    //清空先前分組
  temp |= 0x05FA0000 ;                    //寫入鑰匙
  temp |= temp1 ;     
  SCB->AIRCR = temp ;                    //設置分組
  //設置優先級
  temp = ( u32 )PrePriority<<( 4-Group ) ;
  temp |= SubPriority&( 0x0f>>Group ) ;
  temp &= 0x0F ;                      //取低四位
  NVIC->ISER[ Channel/32 ] |= ( 1

3.3 外部中斷EXIT結構

3.3.1 EXIT概述

外部中斷/事件控制器由連接線設備中的多達20個邊緣檢測器或其他設備中的19個邊緣檢測器組成,用于生成事件/中斷請求。每條輸入線可以獨立配置以選擇類型(事件或中斷)和相應的觸發事件(上升或下降或兩者)。每條線也可以獨立屏蔽。

   對于STM32來說,每一個端口都可以配置為外部中斷,根據中斷信號的類型都可以單獨配置上升沿觸發或者下降沿觸發,中斷服務函數相互獨立。

3.3.2 EXIT相關寄存器

(1) 中斷屏蔽寄存器 :IMR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- M19 M18 M17 M16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
M15 M14 M13 M12 M11 M10 M9 M8 M7 M6 M5 M4 M3 M2 M1 M0

Bit 19~Bit 0:線x上的中斷請求配置位

0:禁止輸入線x上的中斷請求

   1:允許輸入線x上的中斷請求

(2) 上升沿觸發選擇寄存器 :RTSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- R19 R18 R17 R16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0

Bit 19~Bit 0:線x上的上升沿觸發事件配置位

0:禁止輸入線x上的上升沿觸發

   1:允許輸入線x上的上升沿觸發

(3) 下降沿觸發選擇寄存器 :FTSR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
- F19 F18 F17 F16
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
F15 F14 F13 F12 F11 F10 F9 F8 F7 F6 F5 F4 F3 F2 F1 F0

Bit 19~Bit 0:線x上的下降沿觸發事件配置位

0:禁止輸入線x上的下降沿觸發

   1:允許輸入線x上的下降沿觸發

(4) 外部中斷配置寄存器1 :EXTIXR1

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI3[3:0] EXTI2[3:0] EXTI1[3:0] EXTI0[3:0]

EXTIx[3:0]:EXTIx配置(x = 0~3)

0000:PA[x]引腳 0100:PE[x]引腳 0001:PB[x]引腳 0101:PF[x]引腳

0010:PC[x]引腳 0110:PG[x]引腳 0011:PD[x]引腳

(5) 外部中斷配置寄存器2 :EXTIXR2

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI7[3:0] EXTI6[3:0] EXTI5[3:0] EXTI4[3:0]

EXTIx[3:0]:EXTIx配置(x = 4~7)

0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

(6) 外部中斷配置寄存器3 :EXTIXR3

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI11[3:0] EXTI10[3:0] EXTI9[3:0] EXTI8[3:0]

EXTIx[3:0]:EXTIx配置(x = 8~11)

0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

(7) 外部中斷配置寄存器4 :EXTIXR4

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
EXTI15[3:0] EXTI14[3:0] EXTI13[3:0] EXTI12[3:0]

EXTIx[3:0]:EXTIx配置(x = 12~15)

0000:PA[x]引腳

0100:PE[x]引腳

0001:PB[x]引腳

0101:PF[x]引腳

0010:PC[x]引腳

0110:PG[x]引腳

0011:PD[x]引腳

(8) APB2外設時鐘使能寄存器 :APB2ENR

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
-
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- USART1EN - SPI1EN TIM1EN ADC2EN ADC1EN - IOPEEN IOPDEN IOPCEN IOPBEN IOPAEN - AFIOEN

Bit 14:USART1時鐘使能(寫1開啟,寫0關閉)

Bit 12:SPI1時鐘使能(寫1開啟,寫0關閉)

Bit 11:TIM1時鐘使能(寫1開啟,寫0關閉)

Bit 10:ADC2時鐘使能(寫1開啟,寫0關閉)

Bit 9:ADC1時鐘使能(寫1開啟,寫0關閉)

Bit 6:GPIOE時鐘使能(寫1開啟,寫0關閉)

Bit 5:GPIOD時鐘使能(寫1開啟,寫0關閉)

Bit 4:GPIOC時鐘使能(寫1開啟,寫0關閉)

Bit 3:GPIOB時鐘使能(寫1開啟,寫0關閉)

Bit 2:GPIOA時鐘使能(寫1開啟,寫0關閉)

Bit 0:輔助功能IO時鐘使能(寫1開啟,寫0關閉)

3.3.3 外部中斷配置函數

/***************************************************
Name    :EXIT_Config
Function  :外部中斷配置
Parameter  :
      GPIOx:0~6,代表GPIOA~G
      BITx:需要使能的位 
      TRIM:觸發模式
        1:下升沿
        2:上降沿
        3:任意電平觸發
Return    :None
***************************************************/
void EXIT_Config( u8 GPIOx, u8 BITx, u8 TRIM )
{
  u8 EXTADDR ;
  u8 EXTOFFSET ;
  EXTADDR = BITx/4 ;                      //得到中斷寄存器組的編號
  EXTOFFSET = ( BITx%4 )*4 ;
  RCC->APB2ENR |= 0x01 ;                    //使能io復用時鐘       
  AFIO->EXTICR[ EXTADDR ] &= ~( 0x000F<<EXTOFFSET );      //清除原來設置
  AFIO->EXTICR[ EXTADDR ] |= GPIOx<<EXTOFFSET ;        //EXTI.BITx映射到GPIOx.BITx
  EXTI->IMR |= 1<<BITx ;                    //開啟line BITx上的中斷
   if( TRIM&0x01 )  EXTI->FTSR |= 1<<BITx ;            //下降沿觸發
  if( TRIM&0x02 )  EXTI->RTSR |= 1<<BITx ;            //上升降沿觸發
}

3.4 其他文件的添加

3.4.1 寄存器定義文件

(1)添加用到的NVIC寄存器組和EXTI寄存器組的定義。

圖片

(2)定義寄存器組地址

圖片

3.4.2 sys.h文件

圖片

上圖就是添加子函數聲明,為了用于其他文件調用。

3.4.3 sys.c文件

(1)在STM32時鐘配置函數之前增加復位時鐘和中斷的功能,最終函數如下圖所示。

圖片

(2)添加剛才的兩個子函數

圖片

圖片

至此,sys文件里面最基礎的函數就全部添加完畢了

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可編程
    +關注

    關注

    2

    文章

    874

    瀏覽量

    39933
  • STM32
    +關注

    關注

    2272

    文章

    10924

    瀏覽量

    357584
  • Cortex-M3
    +關注

    關注

    9

    文章

    270

    瀏覽量

    59590
收藏 人收藏

    評論

    相關推薦

    一文詳解STM32F103單片機中斷架構

    Cortex-M3內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,并且具有256級的可編程中斷設置。但STM32并沒有使用Cortex-M3內核的全部東西,而是只用了
    發表于 01-19 16:46 ?8728次閱讀
    一文詳解STM32F103單片機<b class='flag-5'>中斷</b><b class='flag-5'>架構</b>

    關于中斷架構在raw os 中的設計

    的最大瓶頸是在中斷的驅動架構這里,只要抓好這個整體,系統的最大關中斷時間是可以控制在10 us以下的。落眼于系統設計的架構,抓住事物內部的主要矛盾,從宏觀角度處理問題比微觀更為直接有效
    發表于 02-27 14:23

    關于helper2416 項目的完成度報告

    模塊: 1 系統啟動代碼2 系統中斷架構3 raw os 的移植4 實現串口發送、接收信,基于中斷模式下。5.移植raw os shell 基于上述開發的串口驅動,所有外設的驅動都基于shell命令來
    發表于 05-19 15:17

    DSP28377D的從入門到精通(3)——外設中斷

    本帖最后由 1418497227 于 2020-2-28 09:44 編輯 在基本了解28377的整體芯片硬件架構和系統控制功能后,在我們學習例程之前有必要先了解一下外設中斷的一些基本知識
    發表于 02-26 13:25

    STM32 的核心Cortex-M3 處理器是什么

    標準的存儲映射。嵌套中斷向量控制器(Nested Vector Interrupt Controller,簡稱NVIC)是Cortex-M3 處理器中一個比較關鍵的組件,它為基于Cortex-M3 的微控制器提供了標準的中斷架構
    發表于 07-23 08:35

    STM32的核心Cortex-M3處理器是什么

    了標準的中斷架構和優秀的中斷響應能力,為超過240個中斷源提供專門的中斷入口,而且可以賦予每個中斷
    發表于 08-02 08:52

    stm32F4有兩種CPU模式

    發生異常時,會從異常向量表的起始位置讀取4byte (MSP),作為特權模式的棧stm32F4的中斷架構分為:不可屏蔽異常和可屏蔽異常(將中斷看作是一種特殊的異常),不可屏蔽異常是stm32F4的...
    發表于 08-13 06:09

    STM32的核心Cortex-M3處理器的標準化是什么意思

    提供了標準的中斷架構和優秀的中斷響應能力,為超過240個中斷源提供專門的中斷入口,而且可以賦予每個中斷
    發表于 12-06 07:53

    基于RT-Thread+RA6M4的虛擬儀器中斷開發方案分享

    大循環+中斷架構,對于基于RTOS的系統,要了解其底層機制,調度等,也必須要先了解芯片的中斷機制。本章就講講本芯片的中斷。該芯片使用的是CORTEX-M33內核,所以需要了解該內核的
    發表于 07-11 11:11

    Windows CENET中斷架構分析和高速AD驅動程序的開發

    本文分析了Windows CE.NET嵌入式實時系統的中斷架構和流式驅動架構 及其設備驅動程序的開發方法。實現了該系統下的高速AD驅動程序的開發并進行了實際測試 。
    發表于 04-18 10:02 ?0次下載

    STM32 的核心Cortex-M3 處理器

    標準的存儲映射。 嵌套中斷向量控制器(Nested Vector Interrupt Controller,簡稱NVIC)是Cortex-M3 處理器中一個比較關鍵的組件,它為基于Cortex-M3 的微控制器提供了標準的中斷架構
    發表于 12-01 11:51 ?9次下載
    STM32 的核心Cortex-M3 處理器

    STM32入門學習筆記之中斷架構(下)

    Cortex-M3內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,并且具有256級的可編程中斷設置。但STM32并沒有使用Cortex-M3內核的全部東西,而是只用了
    的頭像 發表于 02-16 09:57 ?948次閱讀
    STM32入門學習筆記之<b class='flag-5'>中斷</b><b class='flag-5'>架構</b>(下)

    STM32入門學習筆記之中斷架構(上)

    Cortex-M3內核支持256個中斷,其中包含了16個內核中斷和240個外部中斷,并且具有256級的可編程中斷設置。但STM32并沒有使用Cortex-M3內核的全部東西,而是只用了
    的頭像 發表于 02-16 09:57 ?1401次閱讀

    【虹科干貨】FC-NVMe 介紹及性能分析

    ,從而減少IO開銷和延遲。另一方面是優化中斷架構,以實現可擴展IOPs和未來NVMe技術的可擴展性。具體來說,FC-NVMe協議使用NVMe命令通過經驗證的光纖通
    的頭像 發表于 05-24 16:24 ?1064次閱讀
    【虹科干貨】FC-NVMe 介紹及性能分析

    Linux中斷子系統硬件架構

    中斷子系統硬件架構 一個完整的設備中,與中斷相關的硬件可以劃分為3類,它們分別是:設備、中斷控制器和CPU本身。 設備:設備是發起中斷的源,
    的頭像 發表于 09-28 14:09 ?567次閱讀
    Linux<b class='flag-5'>中斷</b>子系統硬件<b class='flag-5'>架構</b>
    在线百家乐官网官方网| 百家乐官网算点子打法攻略| 優博百家乐官网客服| 百家乐官网多少点数算赢| 17pk棋牌官方下载| 德州扑克在线玩| 大发888老虎机手机版下载安装| 百家乐玩法说| 阿玛尼百家乐的玩法技巧和规则| 澳门赌百家乐能赢钱吗| 奥斯卡百家乐官网的玩法技巧和规则 | 百家乐官网椅子| 网上百家乐博彩正网| 大发888体育官网| 百家乐官网防伪筹码套装| 网上百家乐博彩正网| 大发888易付168 充值| 百家乐官网连线游戏下载| 金字塔百家乐官网的玩法技巧和规则 | 大发888下载官网| 至尊百家乐官网年代| 百家乐打大必赢之法| 六合彩官方网| 温州百家乐官网的玩法技巧和规则| 吉利百家乐的玩法技巧和规则| 百家乐官网赌术揭秘| 环球百家乐官网娱乐城| 百家乐公式软件| 老牌全讯网| 丽都百家乐官网的玩法技巧和规则| 大发888 真钱娱乐场| 百家乐官网赢家电子书| 百家乐如何制| 百家乐官网路单打法| 豪博百家乐现金网| 易胜博娱乐| 网上玩百家乐技巧| 新葡京| 百家乐如何必胜| 皇冠网址推介| 皇冠百家乐代理网|