精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

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

麥辣雞腿堡 ? 來源:茶話MCU ? 作者:茶話MCU ? 2023-06-21 16:08 ? 次閱讀

這里優(yōu)先級分組選擇的是將優(yōu)先級的4位控制位全部用作搶占優(yōu)先級的配置,響應(yīng)優(yōu)先級都一樣,即不做特別配置。那么上圖中SYSTICK/TIM2/TIM3/TIM4的中斷的搶占優(yōu)先級數(shù)據(jù)0、2、3、4其實是站在中斷優(yōu)先級寄存器的高4位而言的,那么放到整個8位優(yōu)先級寄存器來看的話,他們的優(yōu)先級應(yīng)該是0x00,0x20,0x30,0x40【其實,低4位值是多少無關(guān)緊要,反正無效位】。

前面提過了,現(xiàn)在BASEPRI寄存器也只用到高4位,低4位保留。顯然,如果在給BASEPRI寄存器賦值時按照基于高4位得到數(shù)字往里面寫的話肯定都是無效的。

比方,我們期望在主程序里將上面TIM2/TIM3/TIM4的幾個中斷都屏蔽掉,若代碼像下面截圖里這樣寫肯定達不到目的。我這里開啟了TIM2/TIM3/TIM4的周期性更新中斷。【本文代碼編譯、調(diào)試基于ARM

MDK IDE】

圖片

圖片

經(jīng)過測試也的確沒有達到目的。我寫__set_BASEPRI(2)的本意是想屏蔽掉那幾個定時器的中斷響應(yīng),結(jié)果發(fā)現(xiàn)根本沒作用。BASEPRI寄存器也沒正確寫入,因為數(shù)據(jù)2只能寫到BASEPRI寄存器的低4位,這幾位恰好是無效位。不難理解,當(dāng)我們改寫成__set_BASEPRI(0x20)時就可以達到目的了。

圖片

此時,BASEPRI被正確寫入,TIM2/TIM3/TIM4的中斷不能得到響應(yīng),倒是SYSTICK中斷可以不被影響地得到響應(yīng),因為它的優(yōu)先級是0,BASEPRI的配置屏蔽不了它。也就是說,通過配置BASEPRI寄存器來設(shè)置中斷響應(yīng)門檻的話,是阻止不了優(yōu)先級為0或更高優(yōu)先級的中斷的響應(yīng)的。如果對BASEPRI寫0表示放棄其設(shè)置的中斷門檻的功能。

如果希望對包括0優(yōu)先級在內(nèi)的所有可配置中斷進行關(guān)閉或屏蔽,能否做得到呢?若可以,如何操作?

STM32芯片里的中斷如果按中斷源是來自ST外設(shè)還是ARM核處理器可以分為異常和中斷,比方下圖中灰色部分的就是異常,其它為中斷。【截圖來自STM32G4系列參考手冊】

圖片

平常我們統(tǒng)稱二者為中斷,不做區(qū)分。如果說把所有中斷按其優(yōu)先級是否可以配置,又可以將中斷分為優(yōu)先級固定和優(yōu)先級可配置的中斷。其中,優(yōu)先級固定的中斷在上面表格中都明確標(biāo)示了fixed字樣,優(yōu)先級可配置的都加注了settable字樣。結(jié)合前面提到的優(yōu)先級寄存器的特性,可配置的優(yōu)先級是不會高于0級,即配置的數(shù)字不會小于0的。

若我們期望對所有可配置中斷進行關(guān)閉或屏蔽,可以操作另一個叫PRIMASK的寄存器,它只有1位有效控制位。

圖片

我們通過對PARMASK寫1,令CPU對所有優(yōu)先級可配置的中斷不做響應(yīng);若對其寫0表示放棄屏蔽功能。比方,我們還是接著前面的演示代碼來看看效果。

圖片

這時,前面提到的4個定時器中斷都不能得到響應(yīng)了,雖打了斷點但過不去。我們還可以借助調(diào)試工具看到這幾個中斷的響應(yīng)情況【SYSTICK位置離得遠,單獨截取后插進圖中的】。

圖片

對于上圖的部分信息我這里稍微解釋下。

圖形上方的字母E、P、A是下方Eable/Pending/Active單詞的首字母。Enable表示相應(yīng)中斷是否在NVIC端得到響應(yīng)允許;Pending表示中斷等待CPU的執(zhí)行;Active表示中斷服務(wù)程序正在被執(zhí)行。從圖中可以看出,SYSTICK/TIM2/TIM3/TIM4的中斷響應(yīng)都雖得到允許,但都處于Pending期待執(zhí)行狀態(tài)。既然沒有得到執(zhí)行,Active位自然也是0。

上圖中優(yōu)先級的數(shù)字顯然是按照高4位結(jié)合優(yōu)先級分組后來看的,那個S表示SubPriority的意思。為了看得更清晰點,我不妨將優(yōu)先級分組采用下面的做法重新配置下,保持原搶占優(yōu)先級都不動,增加1位響應(yīng)優(yōu)先級【即子優(yōu)先級】配置。目前4位優(yōu)先級配置位拆分為3位搶占優(yōu)先級配置位和1位響應(yīng)優(yōu)先級配置位。當(dāng)前測試代碼也保持不動。

圖片

顯然,上圖中的搶占優(yōu)先級編號2、3、4是站在分組后的高3位單獨來看的,響應(yīng)優(yōu)先級是站在分組后剩下的1位單獨來看的。如果我們把兩類優(yōu)先級的配置合在高4位一起看,優(yōu)先級數(shù)字應(yīng)該分別是十進制數(shù)1、5、6、9。【這個地方要弄清楚,否則下面調(diào)試結(jié)果看不明白。】

圖片

基于前面測試代碼和現(xiàn)有配置,我們看看運行后的中斷響應(yīng)情況。

圖片

剛才雖然調(diào)整了優(yōu)先級的分組配置,但這幾個中斷的搶占優(yōu)先級都沒改變,所以在PRIMASK為1的情況下都不能得到響應(yīng)。我們可以發(fā)現(xiàn)這幾個中斷的優(yōu)先級站在高4位的角度來看而得出的優(yōu)先級數(shù)字跟我上面分析的基本一致,除了SYSTICK的。

按理此時此處SYSTICK的優(yōu)先級應(yīng)該是1而不是0。為什么會這樣呢?原因就在于我基于CubeMx組織的代碼,這個過程中如果使用SYSTICK做庫代碼的TICK時鐘,其中斷優(yōu)先級的配置使用默認配置,沒有理睬CubeMx這邊針對它子優(yōu)先級的配置。Cube庫在配置SYSTICK優(yōu)先級時,默認使用全部4位用作搶占優(yōu)先級的配置,同時將子優(yōu)先級配置為0。當(dāng)然,我們可以針對性地調(diào)整來適應(yīng)我們的需求。主要是下面這個weak特性的初始函數(shù),我們可以手動修改這個函數(shù)里關(guān)于中斷優(yōu)先級的配置。

圖片

關(guān)于使用PRIMASK屏蔽所有可配置中斷的做法還有其它等效動作,比如使用CPSID指令和CPSIE指令或調(diào)用相關(guān)CMSIS函數(shù)。【參見下圖】

圖片

它們的作用一樣,也就是我們平常所說的開、關(guān)總中斷,準(zhǔn)確點說是屏蔽所有優(yōu)先級可配置中斷的響應(yīng)或者放棄屏蔽功能。對于開、關(guān)總中斷的說法,從實現(xiàn)屏蔽效果來看勉強可以說能關(guān)總中斷。但整體上講,個人覺得這個說法不太合適,還很容易給人帶來誤解,頗具誤導(dǎo)性。其實,不論是操作PRIMASK還是BASEPRI寄存器,并沒有對被屏蔽中斷的原有參數(shù)和配置做任何改變。即那些暫時被屏蔽的中斷的中斷響應(yīng)允許位、中斷請求使能位、中斷觸發(fā)事件等都不會因為暫時的被屏蔽而發(fā)生改變。打個形象而不是特別貼切的比方。當(dāng)你開著豪車愉快地跑在某條道上,聽著歌哼著曲。突然前方有交警在對道路做臨時管制,你和其它一干人車都被攔停下來。原因是有一行高級別的人物要保障優(yōu)先通行。你等雖被攔停下來,既沒人說你無證駕駛、也沒人告知你無權(quán)走這條道,證照都在,行路權(quán)也有,就是此刻級別不夠。一旦放行,你依然可以一如既往地行使。

我倒覺得ARM技術(shù)手冊提到的優(yōu)先級提升更好理解和接受些。即通過對BASEPRI、PRIMASK這些寄存器編程提升當(dāng)前執(zhí)行程序的優(yōu)先級,使得低于當(dāng)前優(yōu)先級的中斷暫時得不到響應(yīng)。適當(dāng)時候放棄優(yōu)先級升級功能,恢復(fù)原狀。

可能有人知道,還有個可以關(guān)閉或屏蔽優(yōu)先級高至-1級的HardFault異常的控制寄存器,就是FAULTMASK,也是1位有效位,操作跟PRIMASK類似。有興趣的話,可以自行進一步研究下。

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

    關(guān)注

    2266

    文章

    10873

    瀏覽量

    354871
  • 控制
    +關(guān)注

    關(guān)注

    4

    文章

    1011

    瀏覽量

    122628
收藏 人收藏

    評論

    相關(guān)推薦

    在C語言環(huán)境訪問特殊功能寄存器sfr的經(jīng)驗

    單片機的特殊功能寄存器SFR,是SRAM地址已經(jīng)確定的SRAM單元,在C語言環(huán)境對其訪問歸納起來有兩種方法
    的頭像 發(fā)表于 11-10 09:46 ?9289次閱讀
    在C語言環(huán)境<b class='flag-5'>下</b>訪問<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>sfr的經(jīng)驗

    硬件特殊功能寄存器編程思路和RAM使用的問題求解?

    著RAM。 而以前弄51,AVR,PIC的時候硬件特殊功能寄存器都是一個一個設(shè)置。 請教一這兩個方法各有什么有點和缺點。
    發(fā)表于 05-17 12:24

    關(guān)于三星2410A處理特殊功能寄存器問題

    會有這些特殊功能寄存器的地址的實際地址。哪FLASH里面地址和芯片的特殊功能寄存器的實際地址是什么關(guān)系了?如何去實際操作這些
    發(fā)表于 10-02 21:56

    特殊功能寄存器

    MCS-51單片機的特殊功能寄存器總是不能靈活運用額。。比如TMOD、TCON、什么的,在做定時中斷的時候老是不理解,各位幫指點指點呀!
    發(fā)表于 02-06 23:09

    特殊功能寄存器位置及功能是什么

    特殊功能寄存器(SFR)位置及功能
    發(fā)表于 01-05 07:07

    【硬見小百科】單片機的特殊功能寄存器

    在單片機中有一些獨立的存儲單元是用來控制這些器件的,被稱之為特殊功能寄存器(SFR)。 特殊功能寄存器地址映象表(一) 特殊功能
    的頭像 發(fā)表于 01-16 13:45 ?5338次閱讀

    51單片機的21個特殊功能寄存器的詳細資料說明

    學(xué)習(xí)51單片機的過程中,其實就是學(xué)習(xí)怎么用它的特殊功能寄存器(有些寄存器是我們看不到的),特殊功能寄存器是 80C51單片機中各
    發(fā)表于 09-10 17:26 ?14次下載
    51單片機的21個<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>的詳細資料說明

    51單片機的21個特殊功能寄存器詳細資料概述

    在80C51單片機中設(shè)置了與片內(nèi)RAM統(tǒng)一編址的21個特殊功能寄存器(SFR)。訪問SFR只允許使用直接尋址方式。特殊功能寄存器(SFR)每一位的定義和作用與單片機各部件直接相關(guān)。
    發(fā)表于 07-09 17:40 ?8次下載
    51單片機的21個<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>詳細資料概述

    7課:單片機的特殊功能寄存器 2020/11/15

    7課:單片機的特殊功能寄存器 2020/11/15
    發(fā)表于 11-20 12:51 ?7次下載
    7課:單片機的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b> 2020/11/15

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

    簡單來說,就是片內(nèi)RAM和特殊功能寄存器在物理上是相互獨立的。就像51子系列內(nèi)部RAM沒有高128B,但它任然有特殊功能寄存器,因為特殊功能
    發(fā)表于 11-23 16:51 ?22次下載
    51單片機的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>到底在哪,為何51子系列沒有高128B仍然有<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>

    【硬見小百科】單片機的特殊功能寄存器

    在單片機中有一些獨立的存儲單元是用來控制這些器件的,被稱之為特殊功能寄存器(SFR)。<特殊功能寄存器地址映象表(一)><特殊功能
    發(fā)表于 12-20 19:15 ?14次下載
    【硬見小百科】單片機的<b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>

    STC單片機常用特殊功能寄存器速查

    STC單片機常用特殊功能寄存器速查(STC-SFR2-b9正式版)
    發(fā)表于 09-30 17:20 ?0次下載

    為何修改BASEPRI寄存器無效

    有STM32用戶發(fā)現(xiàn)在操作BASEPRI特殊功能寄存器時,根本不起作用。比方,它目前配置了幾個中斷,優(yōu)先級各不相同,按照STM32CubeMx里的配置分別為2、3、4不等,當(dāng)他在
    的頭像 發(fā)表于 04-26 09:16 ?2336次閱讀
    為何修改<b class='flag-5'>BASEPRI</b><b class='flag-5'>寄存器</b><b class='flag-5'>無效</b>?

    操作BASEPRI特殊功能寄存器無效解決方法(上)

    有STM32用戶發(fā)現(xiàn)在操作BASEPRI特殊功能寄存器時,根本不起作用。比方,它目前配置了幾個中斷,優(yōu)先級各不相同,按照STM32CubeMx里的配置分別為2、3、4不等,當(dāng)他在
    的頭像 發(fā)表于 06-21 16:04 ?1505次閱讀
    <b class='flag-5'>操作</b><b class='flag-5'>BASEPRI</b><b class='flag-5'>特殊功能</b><b class='flag-5'>寄存器</b>時<b class='flag-5'>無效</b><b class='flag-5'>解決方法</b>(上)

    特殊功能寄存器的解釋整理匯總

    電子發(fā)燒友網(wǎng)站提供《特殊功能寄存器的解釋整理匯總.pdf》資料免費下載
    發(fā)表于 05-09 14:27 ?7次下載