有STM32用戶發(fā)現(xiàn)在操作BASEPRI特殊功能寄存器時(shí),根本不起作用。比方,它目前配置了幾個(gè)中斷,優(yōu)先級(jí)各不相同,按照STM32CubeMx里的配置分別為2、3、4不等,當(dāng)他在BASEPRI寄存器里寫(xiě)這幾個(gè)數(shù)字中的任意一個(gè)時(shí),發(fā)現(xiàn)BASEPRI的數(shù)字始終是0,沒(méi)有任何效果。
我們知道,通過(guò)配置BASEPRI寄存器非0值來(lái)給系統(tǒng)中的中斷響應(yīng)設(shè)置門(mén)檻,當(dāng)中斷優(yōu)先級(jí)低于某個(gè)級(jí)別時(shí)將不會(huì)得到CPU的響應(yīng)執(zhí)行,也就是說(shuō)只有中斷優(yōu)先級(jí)高于某個(gè)級(jí)別時(shí)才能得到響應(yīng)。下面截圖是來(lái)自ARM
CORTEX M4技術(shù)手冊(cè)中有關(guān)BASEPRI寄存器的描述。
從這里可以看到該寄存器的有效配置位有8位,對(duì)其寫(xiě)0無(wú)意義,或者說(shuō)放棄設(shè)置中斷響應(yīng)門(mén)檻功能。在ARMCORTEX-M內(nèi)核系統(tǒng)里,中斷優(yōu)先級(jí)的高低跟表示優(yōu)先級(jí)的數(shù)字大小成相反關(guān)系,即數(shù)字越小的中斷優(yōu)先級(jí)配置值所對(duì)應(yīng)的優(yōu)先級(jí)反而越高。
根據(jù)BASEPRI寄存器的定義,假設(shè)給BASEPRI寫(xiě)數(shù)字5,那就意味著只有中斷優(yōu)先級(jí)高于5的中斷,即中斷優(yōu)先級(jí)的數(shù)字小于5的中斷可以得到響應(yīng),而其它低于優(yōu)先級(jí)5的中斷將會(huì)被屏蔽。【注:這里說(shuō)的優(yōu)先級(jí)比較最終都體現(xiàn)在搶占優(yōu)先級(jí)上】
另外,在ARM內(nèi)核里關(guān)于每個(gè)中斷的優(yōu)先級(jí)配置寄存器也是8位,并支持字節(jié)訪問(wèn)。
內(nèi)核里還有跟中斷優(yōu)先級(jí)有關(guān)的寄存器,它把中斷優(yōu)先級(jí)配置位分成2部分,用來(lái)分別設(shè)置每個(gè)中斷的組優(yōu)先級(jí)和子優(yōu)先級(jí),或稱搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),也有稱主優(yōu)先級(jí)和子優(yōu)先級(jí)的,意思都一樣。個(gè)人喜歡中間的術(shù)語(yǔ)。
以上圖優(yōu)先級(jí)分組值【PRIGROUP】等于3為例。中斷優(yōu)先級(jí)寄存器中的bit0bit3用作配置該中斷的響應(yīng)優(yōu)先級(jí),顯然,它的值可以是0到15的任一值。bit4bit7用來(lái)配置該中斷的強(qiáng)占優(yōu)先級(jí),同樣它的值也可以是0到15的任一值。若以【PRIGROUP】等于7為例,則所有可配置優(yōu)先級(jí)的中斷只配置響應(yīng)優(yōu)先級(jí),不區(qū)分強(qiáng)占優(yōu)先級(jí),或者說(shuō)搶占優(yōu)先級(jí)都一樣,或者說(shuō)彼此不發(fā)生中斷搶占都一個(gè)意思。所謂中斷搶占即指另一中斷事件打斷正在執(zhí)行的中斷服務(wù)程序而響應(yīng)更高優(yōu)先級(jí)的程序。
上面都基于ARM
Cortex-M內(nèi)核的最初設(shè)計(jì)來(lái)說(shuō)的,我們知道,STM32是基于ARM內(nèi)核添加ST的外設(shè)而成,ST在設(shè)計(jì)芯片的中斷優(yōu)先級(jí)這個(gè)地方,在AMR核的設(shè)計(jì)基礎(chǔ)上做了些針對(duì)性的調(diào)整,涉及中斷優(yōu)先級(jí)的寄存器的有效控制位由8位變成4位,且僅使用高4位,低4位變成保留位。【下圖來(lái)自STM32
Cortex M4 編程手冊(cè)。注意紅色下劃線特別說(shuō)明。】
不難理解,BASEPRI寄存器也會(huì)跟著做了調(diào)整,不然沒(méi)法跟上面調(diào)整過(guò)的中斷優(yōu)先級(jí)寄存器匹配,它也只使用高4位,低4位變保留位。【下圖來(lái)自STM32F4系列編程手冊(cè)】
當(dāng)然,關(guān)于優(yōu)先級(jí)分組的控制寄存器的內(nèi)容也做了相應(yīng)調(diào)整,即針對(duì)優(yōu)先級(jí)寄存器的高4位來(lái)劃分搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí)的配置。詳見(jiàn)下圖:
把上圖的各種優(yōu)先級(jí)分組配置變得更直觀點(diǎn)就是下圖的樣子。綠色用于配置搶占優(yōu)先級(jí),黃色用于配置響應(yīng)優(yōu)先級(jí),灰色保留位,一共有5種可能的分組情形。
聊到這里,我們得知每個(gè)可配置的STM32片內(nèi)中斷,都有一個(gè)8位優(yōu)先級(jí)配置寄存器與之對(duì)應(yīng),且只用到高4位。我們接著看看開(kāi)篇的問(wèn)題。目前STM32的有關(guān)中斷配置如下圖所示【使用STM32CubeMx工具進(jìn)行】:
-
寄存器
+關(guān)注
關(guān)注
31文章
5412瀏覽量
123157 -
STM32
+關(guān)注
關(guān)注
2288文章
10999瀏覽量
362008 -
控制
+關(guān)注
關(guān)注
5文章
1021瀏覽量
123492
發(fā)布評(píng)論請(qǐng)先 登錄
在C語(yǔ)言環(huán)境下訪問(wèn)特殊功能寄存器sfr的經(jīng)驗(yàn)

關(guān)于三星2410A處理器特殊功能寄存器問(wèn)題
特殊功能寄存器
【硬見(jiàn)小百科】單片機(jī)的特殊功能寄存器
51單片機(jī)的21個(gè)特殊功能寄存器的詳細(xì)資料說(shuō)明

51單片機(jī)的21個(gè)特殊功能寄存器詳細(xì)資料概述

51單片機(jī)常用的特殊功能寄存器有哪些

51單片機(jī)的特殊功能寄存器到底在哪,為何51子系列沒(méi)有高128B仍然有特殊功能寄存器

【硬見(jiàn)小百科】單片機(jī)的特殊功能寄存器

為何修改BASEPRI寄存器無(wú)效?

操作BASEPRI特殊功能寄存器時(shí)無(wú)效解決方法(下)

評(píng)論