色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

ARM Cortex-M4中斷優先級和嵌套

SwM2_ChinaAET ? 來源:未知 ? 作者:李倩 ? 2018-08-14 09:29 ? 次閱讀

坐在上海回北京的高鐵上,漫長的旅途著實讓人感到無聊(沒買到直達的高鐵,只能慢悠悠的走一站停一站,暈,都高鐵時代了,竟然還這樣,想起了大學放假回家站十幾個小時綠皮車的時光啊,哈哈),遂有點“寫心萌動”,不由感嘆——“春”天真是來了,春為啥加引號捏,我相信大家都懂的,哈哈。這樣也好,俺又可以慢悠悠的寫作抒情了,走著。。。

其實都搞了這么長時間的ARM開發,關于其至關重要的中斷優先級問題我早就想跟大家伙分享分享了,可惜一方面想真正的講清楚這個問題估計又得大費周章和墨水,另一方面自己越來越忙進一步導致寫文章倒是越來越懶了,呵呵。所以趁著坐高鐵無聊趕緊擼胳膊抹袖子整吧,不然把這么重要的內容放在自己腦子里封存落灰實在是頗為浪費呀,哈哈。那就不多扯淡了,再多扯火車到站了就尷尬了,咳咳。。。

對于中斷優先級配置的需求實際上主要體現在系統存在多個可能的中斷源情況下,這時為了保證代碼的可靠執行,我們不得不考慮很現實的兩個問題,一個是如果兩個以上中斷同時發生,pending請求到CPU,CPU決策該先進哪一個相應的中斷服務Routine,第二個問題是CPU當前已經在響應某個中斷服務,此時來了另一個中斷請求,是否允許其打斷當前中斷服務轉而響應新的中斷請求即我們常說的中斷嵌套問題,不要告訴我沒考慮過哈(如果真是這樣,我只能不客氣的說,這樣搞單片機是不負責任的,很可能給項目帶來潛在的風險bug),那樣的話俺也白寫了,呵呵。那正題來了,對現在紅紅火火的ARM Cortex-M4和M0+兩個核來說,他們是如何解決這兩個問題的呢,因為這兩個核在中斷優先級管理上略有些區別(雖然都是NVIC和SCB兩個寄存器來管理),所以下面我分開來說,另外由于中斷優先級管理屬于內核問題,所以這方面的信息你不會在各大半導體廠家的官方手冊中找到,我們只能追根溯源直接到內核的老家ARM官網去找,建議大家有興趣的到ARM官網把M4和M0+的內核手冊下載下來簡單瞅瞅,可能會有意想不到的收獲哦,呵呵:

ARM Cortex-M0+中斷優先級和嵌套

無論是M0+或者是M4內核,實際上他們兩個的中斷優先級都是由NVIC和SCB兩個寄存器來管理的,在這里我默認大家都知道ARM的中斷源分為內核中斷和IRQ中斷了哈(我怕再細講下去又沒完了,呵呵),而對IRQ的中斷管理是由NVIC來主導的,內核的中斷管理則是由SCB來主導的,我們先講IRQ中斷的優先級問題(關于中斷使能和禁能不在本篇討論范圍內哈),打開M0+的內核手冊找到NVIC_IPR寄存器(Interrupt Priority Registers)如下圖所示:

注意觀察我高亮標注的幾塊,從這幾塊中可以抽象出核心的幾個問題,第一個是NVICIPR一共有8個寄存器,而每個寄存器管理4個IRQ中斷,乘法口訣算一下,我們就明白了為啥M0+的IRQ中斷源最多只支持32個了,再加上16個內核中斷,加法口訣再算一下,也就是說M0+最多就是48個中斷源,所以M0+算是比較好搞的了,一會兒講M4就該頭疼了,呵呵;第二個問題是優先級寄存器里面的配置值越低表明相應的中斷優先級越高;第三個問題是每個PRIxx的8位中只有最高兩位[7:6]有效,也就是說實際上M0+的優先級只有四個即0,1,2,3,4,其中0的優先級是最高的;第四個問題,為啥我放到最后說呢,因為這是比較容易忽略的問題,即word-accessible,也就是說這幾個寄存器都只能按字操作,切記不要為了顯示我們的編程技巧而使用指向字節的指針只對某個單獨中斷的優先級進行配置。

至于嵌套的問題,對M0+是比較簡單的,即只要相應中斷的優先級比較高即可隨時搶占比它優先級低的中斷服務。至于內核中斷,其中斷優先級則由SCB模塊的SCB_SHPR寄存器來管理如下圖所示,實際上我們平時常用的就是systemtick中斷,其優先級配置同NVIC,這里就不贅述了。另外,我這里提一下,即如果我們不對優先級進行配置的話,則默認相應中斷源的向量號越低其優先級越高,不過如前面我提到的,我是強烈建議在多中斷的情況最好把每個用到的中斷優先級都根據實際需求進行相應配置,避免潛在的風險。

ARM Cortex-M4中斷優先級和嵌套

我前面提到一句,M4雖然指令集是向下兼容M0+的,但是在中斷優先級管理上是有區別的,由于M4的中斷源比較多(最多允許256),所以其對中斷優先級管理是略有些復雜的,不過一定要仔細看下去,因為我們平時會比較常用到,但是我敢肯定不是所有人的用法是正確的,為啥?待我下面繼續分解(放心,還沒完呢,呵呵),先繼續上圖:

繼續找上圖亮點,一個是M4最高支持16+4*60=256個中斷源,第二個這60個寄存器是可以按字節操作的(我們可以繼續的裝逼用指針了,哈哈),第三個跟M0+一樣即值越小優先級越高,最后則是最大的區別,即每個寄出去你的8位數據都是可以定義其中斷優先級了,說到這里,a question is raised,那是不是意味著M4的優先級最高可以256個級別呢。我只能說,大家想多了,呵呵,繼續看下圖吧,可見PRIGROUP定義了這8位數據到底該怎么用了,這里出現了兩個新名詞,即Group Priority和Subpriority,至于這兩個優先級是什么意思那大家繼續看圖2,大家先仔細理解理解,我喝口水先。。。Ok,繼續回來,從下面兩張圖可以看到在M4內核中,其對中斷優先級管理是分了兩個部分,一個是組優先級一個是子優先級,即組優先級是管理搶占優先級的(即是否能嵌套),即高的組優先級中斷(數值低)可以搶占低的組優先級(數值高)中斷的,而如果組優先級是一樣的,即使子優先級比正在執行的中斷的子優先級高也是不能搶占的,那又有同志們要問問題了,那子優先級有啥用?呵呵,正如圖2所說,在組優先級一致的情況下,多個中斷請求同時發生,這樣的情況下子優先級高的可以先執行的,而子優先級低的則只能暫時pending等著了,呵呵。而回到PRIGROUP的作用是用來配置NVIC的8位數據域是如何分配給搶占優先級和子優先級的,而一般情況下,最好是各留4位給這二位大爺和小爺了,即每位爺最多可配16個優先級,而PRIGROUP是從哪來的呢,呵呵,實際上它是SCB_AIRCR寄存器的其中3位如圖3所示。

呼。。。終于搞完了,總算把這個問題給寫出來了,我腦袋里可以騰出點地方給其他問題了,哈哈。另外實際上我上面寫了這么多理論的東西,但是ARM早已在CMSIS庫里的頭文件中把這部分函數API給出來了(core_cm4.h和core_cm0plus.h),而我之所以不閑麻煩的還是把這個寫出來,還是我這個知其然也要知其所以然的思想在作怪了。不過最后,我還是給出M0+和M4的中斷優先級配置的兩個配置供廣大博友參考吧,然后其他就不多聊了,未完待續:

M0+

NVIC_SetPriority(PORTA_IRQn, 1);

NVIC_SetPriority(PORTB_IRQn, 2);

M4+

NVIC_SetPriorityGrouping(0x03);

NVIC_SetPriority(PORTA_IRQn, NVIC_EncodePriority(0x03,1, 2));

NVIC_SetPriority(PORTB_IRQn, NVIC_EncodePriority(0x03, 2, 2));

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

    關注

    134

    文章

    9164

    瀏覽量

    368596
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10901

    瀏覽量

    212672
  • 嵌套
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7941

原文標題:【博文精選】ARM Cortex-M4和Cortex-M0+中斷優先級及嵌套搶占問題

文章出處:【微信號:ChinaAET,微信公眾號:電子技術應用ChinaAET】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    飛思卡爾 Kinetis L系列M0+/M4中斷優先級設置問題

    這三者)。下面給出個ARM CMSIS庫關于M0+和M4中斷優先級設置的API函數NVIC_S
    發表于 01-28 14:48

    28335中斷嵌套中斷優先級是怎么設置?

    28335中斷嵌套中斷優先級是怎么設置的。現在有這方面的需求,有沒有提供幫助的文檔?謝謝了
    發表于 06-01 08:33

    淺析stm32的中斷嵌套優先級

    stm32的中斷嵌套優先級stm32NVIC優先級分組中斷優先級配置寄存器NVIC_IPRx描述
    發表于 08-13 09:45

    STM32(Cortex-M3)優先級概念

    一、中斷優先級:STM32(Cortex-M3)優先級概念STM32(Cortex-M3)中
    發表于 08-16 07:21

    STM32中斷優先級和開關總中斷

    STM32中斷優先級和開關總中斷一,中斷優先級:STM32(Cortex-M3)
    發表于 08-16 07:05

    STM32中斷優先級和開關總中斷

    STM32中斷優先級和開關總中斷一,中斷優先級:STM32(Cortex-M3)
    發表于 08-23 07:06

    探討一下STM32中斷優先級和開關總中斷

    STM32中斷優先級和開關總中斷一,中斷優先級:STM32(Cortex-M3)
    發表于 01-14 07:43

    Stm32中斷優先級概念及使用

    1.ARM cortex_m3內核支持256個中斷(16個內核+240外部)和可編程256中斷優先級
    發表于 02-28 14:38 ?146次下載

    STM32中斷優先級和開關總中斷教程

    STM32中斷優先級和開關總中斷 教程
    發表于 11-23 18:03 ?0次下載

    STM32中斷及FreeRTOS中斷優先級配置

    STM32中斷,及FreeRTOS中斷優先級配置
    的頭像 發表于 03-04 11:45 ?8983次閱讀
    STM32<b class='flag-5'>中斷</b>及FreeRTOS<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>配置

    msp430的中斷優先級中斷嵌套(及容易理解錯誤的說明)

    msp430的中斷優先級中斷嵌套 MSP430的中斷優先級按所在的向量的大小排列,
    發表于 11-19 19:06 ?11次下載
    msp430的<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>和<b class='flag-5'>中斷</b><b class='flag-5'>嵌套</b>(及容易理解錯誤的說明)

    STM32筆記之中斷優先級和開關總中斷

    STM32中斷優先級和開關總中斷一,中斷優先級:STM32(Cortex-M3)
    發表于 01-14 15:24 ?13次下載
    STM32筆記之<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>和開關總<b class='flag-5'>中斷</b>

    Cortex-M中斷及FreeRTOS中斷優先級配置原理

    下面就來說說關于Cortex-M中斷,及FreeRTOS中斷優先級配置原理。
    發表于 02-08 15:30 ?3次下載
    <b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>及FreeRTOS<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>配置原理

    Cortex-M3中斷優先級的相關知識

    本文詳細介紹Cortex-M3中斷優先級相關知識。
    的頭像 發表于 03-23 11:45 ?2817次閱讀
    <b class='flag-5'>Cortex-M</b>3<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>的相關知識

    Cortex-M 內核中斷/異常系統、中斷優先級/嵌套 詳解

    Cortex-M 內核中斷/異常系統、中斷優先級/嵌套 詳解
    的頭像 發表于 09-27 15:29 ?2402次閱讀
    <b class='flag-5'>Cortex-M</b> 內核<b class='flag-5'>中斷</b>/異常系統、<b class='flag-5'>中斷</b><b class='flag-5'>優先級</b>/<b class='flag-5'>嵌套</b> 詳解
    主站蜘蛛池模板: 国产成人午夜精品免费视频 | 老师小扫货水能么多叫出来 | 一个人免费视频在线观看高清版 | 日韩一本在线 | 国产在线精品亚洲一品区 | 国产传媒18精品A片在线观看 | 美女洗澡脱得一二干净 | 免费撕开胸罩吮胸视频 | 日韩亚洲欧美中文高清在线 | 成人网18免费韩国 | 国产毛多水多高潮高清 | 三男强一女90分钟在线观看 | 麻豆免费版 | 亚洲野狼综合网站 | 99热久久视频只有精品6国产 | 国产XXXXXX农村野外 | 亚洲AV久久久噜噜噜久久 | 亚洲国产成人在线视频 | 一手揉着乳头一手模仿抽插视频 | 亚洲免费在线观看视频 | 国产普通话精品久久 | 无人视频在线观看免费播放影院 | z0000性欧美| 精品AV无码一二三区视频 | 久久精品男人影院 | 99视频精品国产在线视频 | 国产熟妇无码一区二 | 竹菊精品久久久久久久99蜜桃 | 亚洲呦女专区 | 国产成人在线视频观看 | 成人精品视频在线观看 | 性女传奇 快播 | 久久精品国产视频澳门 | 97视频在线观看免费播放 | YY8090福利午夜理论片 | 国产成人8x视频一区二区 | 成人无码在线超碰视频 | SM高H黄暴NP辣H调教性奴 | 影888午夜理论不卡 樱桃熟了A级毛片 | 欧美影院在线观看完整版 mp4 | 国产亚洲精品AV片在线观看播放 |