一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

CKS32F4xx系列產(chǎn)品NVIC中斷優(yōu)先級(jí)管理單元講解

中科芯MCU ? 來源:中科芯MCU ? 2023-02-06 14:52 ? 次閱讀

MCU微課堂

CKS32F4xx系列產(chǎn)品NVIC中斷優(yōu)先級(jí)管理

第三期 2023.2.2

本課將為大家講解CKS32F4xx系列產(chǎn)品的中斷優(yōu)先級(jí)管理單元NVIC。CM4內(nèi)核共支持256個(gè)中斷,其中包含了16個(gè)內(nèi)核中斷和240個(gè)外部中斷,具有256級(jí)可編程中斷設(shè)置。但CKS32F4xx系列只使用了CM4內(nèi)核的一部分,共有98個(gè)中斷,包括16個(gè)帶有FPU核的CM4中斷和82個(gè)可屏蔽中斷,而我們常用的就是這82個(gè)可屏蔽中斷。

NVIC寄存器簡介

MDK為NVIC相關(guān)寄存器其定義了如下的結(jié)構(gòu)體:

typedef struct 
{ 
__IO uint32_t ISER[8]; /*!< Interrupt Set Enable Register */ 
uint32_t RESERVED0[24]; 
__IO uint32_t ICER[8]; 
/*!< Interrupt Clear Enable Register */ 
uint32_t RSERVED1[24]; 
__IO uint32_t ISPR[8]; 
/*!< Interrupt Set Pending Register */ 
uint32_t RESERVED2[24]; 
__IO uint32_t ICPR[8]; 
/*!< Interrupt Clear Pending Register */ 
uint32_t RESERVED3[24]; 
__IO uint32_t IABR[8]; 
/*!< Interrupt Active bit Register */ 
uint32_t RESERVED4[56]; 
__IO uint8_t IP[240]; 
/*!< Interrupt Priority Register, 8Bit wide */ 
uint32_t RESERVED5[644]; 
__O uint32_t STIR; 
/*!< Software Trigger Interrupt Register */ 
} NVIC_Type;

CKS32F4xx系列的中斷在這些寄存器控制下有序執(zhí)行,只有了解這些中斷寄存器后,才能方便的使用CKS32F4xx系列中斷功能。下面重點(diǎn)介紹這幾個(gè)寄存器:

ISER[8]:ISER 全稱是:Interrupt Set-Enable Registers,這是一個(gè)中斷使能寄存器組。上面說了CM4內(nèi)核支持256個(gè)中斷,這里用8個(gè)32位寄存器來控制,每個(gè)位控制一個(gè)中斷。但是CKS32F4xx系列的可屏蔽中斷最多只有82個(gè),所以對(duì)我們來說,有用的就是三個(gè)(ISER[0~2]),ISER[0]的bit 0~31分別對(duì)應(yīng)中斷0~31;ISER[1]的bit 0~31對(duì)應(yīng)中斷32~63;ISER[2]的bit 0~17對(duì)應(yīng)中斷64~81,共82個(gè)中斷。你要使能某個(gè)中斷,必須設(shè)置相應(yīng)的ISER位為 1,使該中斷被使能,另外還要配合中斷分組、屏蔽、IO口映射等設(shè)置才算是一個(gè)完整的中斷設(shè)置。具體每一位對(duì)應(yīng)哪個(gè)中斷,請(qǐng)參考CKS32f4xx.h。

ICER[8]:全稱是:Interrupt Clear-Enable Registers,是一個(gè)中斷除能寄存器組。該寄存器組與 ISER 的作用恰好相反,是用來清除某個(gè)中斷的使能的。其對(duì)應(yīng)位的功能,也和 ICER 一樣。這里要專門設(shè)置一個(gè) ICER 來清除中斷位,而不是向 ISER 寫 0 來清除,是因?yàn)?NVIC 的這些寄存器都是寫 1 有效的,寫 0 是無效的。

ISPR[8]:全稱是:Interrupt Set-Pending Registers,是一個(gè)中斷掛起控制寄存器組。每個(gè)位對(duì)應(yīng)的中斷和ISER是一樣的。通過置1,可以將正在進(jìn)行的中斷掛起,而執(zhí)行同級(jí)或更高級(jí)別的中斷。寫0是無效的。

ICPR[8]:全稱是:Interrupt Clear-Pending Registers,是一個(gè)中斷解掛控制寄存器組。其作用與ISPR相反,對(duì)應(yīng)位也和 ISER是一樣的。通過設(shè)置1,可以將掛起的中斷接掛。寫 0 無效。

IABR[8]:全稱是:Interrupt Active Bit Registers,是一個(gè)中斷激活標(biāo)志位寄存器組。對(duì)應(yīng)位所代表的中斷和ISER一樣,如果為 1,則表示該位所對(duì)應(yīng)的中斷正在被執(zhí)行。這是一個(gè)只讀寄存器,通過它可以知道當(dāng)前在執(zhí)行的中斷是哪一個(gè)。在中斷執(zhí)行完了由硬件自動(dòng)清零。

IP[240]:全稱是:Interrupt Priority Registers,是一個(gè)中斷優(yōu)先級(jí)控制的寄存器組。CKS32F4的中斷分組與這個(gè)寄存器組密切相關(guān)。IP寄存器組由240個(gè)8bit的寄存器組成,每個(gè)可屏蔽中斷占用8bit,這樣總共可以表示240個(gè)可屏蔽中斷。而CKS32F4只用到了其中的82個(gè)。IP[81]~IP[0]分別對(duì)應(yīng)中斷 81~0。而每個(gè)可屏蔽中斷占用的 8bit 并沒有全部使用,而是只用了高4位。這4位,又分為搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)。搶占優(yōu)先級(jí)在前,響應(yīng)優(yōu)先級(jí)在后。而這兩個(gè)優(yōu)先級(jí)各占幾個(gè)位又要根據(jù) SCB->AIRCR 中的中斷分組設(shè)置來決定。

NVIC中斷分組

這里簡單介紹一下 CKS32F4 的中斷分組:CKS32F4將中斷分為5個(gè)組,組0~4。該分組的設(shè)置是由 SCB->AIRCR 寄存器的 bit10~8 來定義的。具體的分配關(guān)系如下:

31aeeeb0-a3f7-11ed-bfe3-dac502259ad0.jpg

通過這個(gè)表,我們就可以清楚的看到組0~4對(duì)應(yīng)的配置關(guān)系,例如組設(shè)置為3,那么此時(shí)所有的82個(gè)中斷,每個(gè)中斷的中斷優(yōu)先寄存器的高四位中的最高3位是搶占優(yōu)先級(jí),低1位是響應(yīng)優(yōu)先級(jí)。每個(gè)中斷,你可以設(shè)置搶占優(yōu)先級(jí)為0~7,響應(yīng)優(yōu)先級(jí)為1或0。搶占優(yōu)先級(jí)的級(jí)別高于響應(yīng)優(yōu)先級(jí)。而數(shù)值越小所代表的優(yōu)先級(jí)就越高。

這里需要注意兩點(diǎn):

第一,如果兩個(gè)中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)都是一樣的話,則看哪個(gè)中斷先發(fā)生就先執(zhí)行;

第二,高優(yōu)先級(jí)的搶占優(yōu)先級(jí)是可以打斷正在進(jìn)行的低搶占優(yōu)先級(jí)中斷的。而搶占優(yōu)先級(jí)相同的中斷,高優(yōu)先級(jí)的響應(yīng)優(yōu)先級(jí)不可以打斷低響應(yīng)優(yōu)先級(jí)的中斷。

結(jié)合實(shí)例說明一下:假定設(shè)置中斷優(yōu)先級(jí)組為2,然后設(shè)置中斷3(RTC_WKUP中斷)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為1。中斷6(外部中斷0)的搶占優(yōu)先級(jí)為3,響應(yīng)優(yōu)先級(jí)為0。中斷7(外部中斷1)的搶占優(yōu)先級(jí)為2,響應(yīng)優(yōu)先級(jí)為0。那么這3個(gè)中斷的優(yōu)先級(jí)順序?yàn)椋褐袛?>中斷3>中斷6。其中中斷3和中斷7都可以打斷中斷6的中斷。而中斷7和中斷3卻不可以相互打斷!

軟件實(shí)現(xiàn)

通過以上介紹,我們熟悉了CKS32F4中斷設(shè)置的大致過程。接下來我們介紹如何使用庫函數(shù)實(shí)現(xiàn)以上中斷分組設(shè)置以及中斷優(yōu)先級(jí)管理,使得我們以后的中斷設(shè)置簡單化。NVIC中斷管理函數(shù)主要在misc.c文件里面。

首先要講解的是中斷優(yōu)先級(jí)分組函數(shù)NVIC_PriorityGroupConfig,其函數(shù)申明如下:

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);

這個(gè)函數(shù)的作用是對(duì)中斷的優(yōu)先級(jí)進(jìn)行分組,這個(gè)函數(shù)在系統(tǒng)中只能被調(diào)用一次,一旦分組確定就最好不要更改。這個(gè)函數(shù)我們可以找到其實(shí)現(xiàn):

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup) 
{ 
assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup)); 
SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup; 
}

從函數(shù)體可以看出,這個(gè)函數(shù)唯一目的就是通過設(shè)置SCB->AIRCR寄存器來設(shè)置中斷優(yōu)先級(jí)分組,查看其定義為:

#define IS_NVIC_PRIORITY_GROUP(GROUP) 
(((GROUP) == NVIC_PriorityGroup_0) || 
((GROUP) == NVIC_PriorityGroup_1) ||  
((GROUP) == NVIC_PriorityGroup_2) ||  
((GROUP) == NVIC_PriorityGroup_3) ||  
((GROUP) == NVIC_PriorityGroup_4))

可以看到這個(gè)定義對(duì)應(yīng)上表中的分組范圍0-4。如果我們需要設(shè)置系統(tǒng)的中斷優(yōu)先級(jí)分組值為2,那么方法是:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);這樣就確定了一共為“2位搶占優(yōu)先級(jí),2位響應(yīng)優(yōu)先級(jí)”。設(shè)置好了系統(tǒng)中斷分組,接下來設(shè)置中斷的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),這里需要用到一個(gè)重要的函數(shù)為中斷初始化函數(shù)NVIC_Init,其函數(shù)聲明為:voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct),其中NVIC_InitTypeDef是一個(gè)結(jié)構(gòu)體,我們可以看看結(jié)構(gòu)體的成員變量:

typedef struct 
{ 
uint8_t NVIC_IRQChannel; 
uint8_t NVIC_IRQChannelPreemptionPriority; 
uint8_t NVIC_IRQChannelSubPriority; 
FunctionalState NVIC_IRQChannelCmd; 
} NVIC_InitTypeDef;

NVIC_InitTypeDef結(jié)構(gòu)體中間有四個(gè)成員變量,這四個(gè)成員變量的作用是:

NVIC_IRQChannel:

定義初始化的是哪個(gè)中斷,這個(gè)我們可以在CKS32f4xx.h中定義的枚舉類型IRQn的成員變量中可以找到每個(gè)中斷對(duì)應(yīng)的名字。例如串口1對(duì)應(yīng)USART1_IRQn。

NVIC_IRQChannelPreemptionPriority:

定義這個(gè)中斷的搶占優(yōu)先級(jí)別;

NVIC_IRQChannelSubPriority:

定義這個(gè)中斷的響應(yīng)優(yōu)先級(jí)別。

NVIC_IRQChannelCmd:

該中斷通道是否使能。比如我們要使能串口1的中斷,同時(shí)設(shè)置搶占優(yōu)先級(jí)為1,響應(yīng)優(yōu)先級(jí)位2,初始化的方法是:

NVIC_InitTypeDefNVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//>>串口 1 中斷 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//>> 搶占優(yōu)先級(jí)為 1 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//>> 響應(yīng)優(yōu)先級(jí)位 2 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //>>IRQ 通道使能 
NVIC_Init(&NVIC_InitStructure);

這里我們講解了中斷的分組的概念以及設(shè)定優(yōu)先級(jí)值的方法,至于每種優(yōu)先級(jí)還有一些關(guān)于清除中斷,查看中斷狀態(tài),這在后面課堂中我們講解每個(gè)中斷的時(shí)候會(huì)詳細(xì)講解到。

課程總結(jié)

中斷優(yōu)先級(jí)設(shè)置的步驟:

1.系統(tǒng)初始化的時(shí)候設(shè)置中斷分組:

確定組號(hào),也就是確定搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的分配位數(shù)。調(diào)用函數(shù)為NVIC_PriorityGroupConfig();

2.設(shè)置所用到的中斷的中斷優(yōu)先級(jí)別:

對(duì)每個(gè)中斷調(diào)用函數(shù)NVIC_Init();確定具體的搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),并使能通道。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5401

    瀏覽量

    122781
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1403

    瀏覽量

    40954
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    902

    瀏覽量

    42367
  • MDK
    MDK
    +關(guān)注

    關(guān)注

    4

    文章

    209

    瀏覽量

    32427
  • NVIC
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    11895

原文標(biāo)題:MCU微課堂 | CKS32F4xx系列產(chǎn)品 NVIC中斷優(yōu)先級(jí)管理

文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCU微課堂|CKS32F4xx系列產(chǎn)品時(shí)鐘配置

    ,并且高時(shí)鐘頻率將導(dǎo)致功耗增加、抗電磁干擾能力變?nèi)?,因此?b class='flag-5'>CKS32F4xx系列產(chǎn)品內(nèi)部具備多個(gè)時(shí)鐘源。本文將對(duì)CKS32F4xx系列產(chǎn)品時(shí)鐘組成進(jìn)行分析,并
    發(fā)表于 12-12 10:17 ?963次閱讀

    CKS32F4xx系列DSP功能介紹

    CKS32F4xx系列使用高性能的32位內(nèi)核,支持浮點(diǎn)運(yùn)算單元(FPU),同時(shí)還支持DSP指令以及存儲(chǔ)保護(hù)(MPU)用來加強(qiáng)應(yīng)用的安全性。
    的頭像 發(fā)表于 03-04 13:43 ?1924次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DSP功能介紹

    NVIC中斷優(yōu)先級(jí)分組

    NVIC中斷優(yōu)先級(jí)分組
    發(fā)表于 03-26 10:45 ?1次下載

    STM32學(xué)習(xí)筆記(4)——NVIC中斷優(yōu)先級(jí)管理和外部中斷EXTI

    STM32學(xué)習(xí)筆記(4)——NVIC中斷優(yōu)先級(jí)管理和外部中斷EXTI一、
    發(fā)表于 11-26 11:36 ?0次下載
    STM32學(xué)習(xí)筆記(<b class='flag-5'>4</b>)——<b class='flag-5'>NVIC</b><b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>管理</b>和外部<b class='flag-5'>中斷</b>EXTI

    2021-04-16 NVIC中斷優(yōu)先級(jí)管理

    NVIC中斷優(yōu)先級(jí)管理NVIC中斷優(yōu)先級(jí)分組
    發(fā)表于 12-04 17:06 ?7次下載
    2021-04-16  <b class='flag-5'>NVIC</b><b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>管理</b>

    STM32f1學(xué)習(xí)筆記五NVIC中斷優(yōu)先級(jí)管理

    級(jí)可編程的中斷優(yōu)先級(jí)。STM32F103系列上面,又只有60個(gè)可屏蔽中斷,在107
    發(fā)表于 01-12 17:31 ?0次下載
    STM32<b class='flag-5'>f</b>1學(xué)習(xí)筆記五<b class='flag-5'>NVIC</b><b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>管理</b>

    CKS32F4xx系列產(chǎn)品串口DMA傳輸

    在上一講,我們講過CKS32F4xx系列的6個(gè)串口都支持DMA傳輸。因此本節(jié)我們對(duì)CKS32F4xx系列的DMA進(jìn)行介紹,同時(shí)利用DMA對(duì)串口數(shù)據(jù)進(jìn)行傳輸。
    的頭像 發(fā)表于 04-10 11:18 ?1246次閱讀

    CKS32F4xx系列產(chǎn)品的定時(shí)器使用-基本特征和定時(shí)操作

    這一課我們將介紹CKS32F4XX系列產(chǎn)品的定時(shí)器使用,CKS32F4XX的定時(shí)器功能十分強(qiáng)大,包含2個(gè)高級(jí)控制定時(shí)器,8個(gè)普通定時(shí)器,2個(gè)基礎(chǔ)定時(shí)器,以及兩個(gè)看門狗定時(shí)器和一個(gè)系統(tǒng)定時(shí)器,總共15個(gè)定時(shí)器之多。關(guān)于定時(shí)器部分內(nèi)
    的頭像 發(fā)表于 05-19 09:18 ?1119次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>的定時(shí)器使用-基本特征和定時(shí)操作

    CKS32F4xx系列DAC功能

    CKS32F4xx系列DAC功能
    的頭像 發(fā)表于 11-06 16:56 ?1040次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>DAC功能

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)器脈沖計(jì)數(shù)

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)器脈沖計(jì)數(shù)
    的頭像 發(fā)表于 11-09 17:38 ?1301次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>Timer的基本使用方法-定時(shí)器脈沖計(jì)數(shù)

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-比較輸出
    的頭像 發(fā)表于 11-09 17:39 ?1043次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>Timer的基本使用方法-比較輸出

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)操作

    CKS32F4xx系列產(chǎn)品Timer的基本使用方法-定時(shí)操作
    的頭像 發(fā)表于 11-09 17:41 ?768次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>Timer的基本使用方法-定時(shí)操作

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品SPI通信
    的頭像 發(fā)表于 10-24 17:12 ?910次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>SPI通信

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置

    MCU微課堂 | CKS32F4xx系列產(chǎn)品GPIO口配置
    的頭像 發(fā)表于 10-24 15:14 ?1000次閱讀
    MCU微課堂 | <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列產(chǎn)品</b>GPIO口配置

    CKS32F4xx系列FSMC功能簡介

    本課講為大家講解CKS32F4xx系列產(chǎn)品的FSMC應(yīng)用實(shí)例,F(xiàn)SMC全稱是Flexible Static Memory Controller,讀作靈活的靜態(tài)存儲(chǔ)控制器,顧名思義,MCU可以通過FSMC擴(kuò)展靜態(tài)內(nèi)存
    的頭像 發(fā)表于 04-14 15:06 ?1304次閱讀
    <b class='flag-5'>CKS32F4xx</b><b class='flag-5'>系列</b>FSMC功能簡介