<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 了解Cortex-M3的中斷

          了解Cortex-M3的中斷

          作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
          在第一個函數(shù)SystemInit()的下一行,會有常見的另一個函數(shù)NVIC_PriorityGroupConfig(NVIC_PriorityGroup_X)(X代表數(shù)字1,2,3...)。此函數(shù)跟中斷配置相關,配置中斷優(yōu)先級,包括搶占優(yōu)先級與子優(yōu)先級。

          關于NVIC(中斷向量控制器)的介紹STM32參考手冊中是找不到的。需要看《Cortex-M3權(quán)威指南》,這本書是著重描述此M3內(nèi)核相關的東西。NVIC也在其中,因為它是內(nèi)核中很重要的一部分。

          本文引用地址:http://www.ex-cimer.com/article/201611/319099.htm

          看了下這本書,對于NVIC描述的很詳細。我就直接截圖咯。

          跟NVIC打交道的寄存器截圖說明。操作NVIC,這些寄存器都是需要掌握的,尤其是需要“掛號”的那四個寄存器。

          關于中斷使能與禁能

          這個的話Cortex-M3分別使用了兩個寄存器控制,一個負責使能與禁能,不像一些簡單的單片機一個BIT位就搞定這兩個功能,此功能帶來的好處就是安全了,不用害怕?lián)淖约旱恼`操作。因為此寄存器都是寫1有效,寫0無效。使能某寄存器則需向使能寄存器寫1,禁能需向禁能寄存器寫1。

          下面的截圖說的是關于懸起與解懸寄存器

          中斷優(yōu)先級

          每個外部中斷的優(yōu)先級寄存器占8位,但是允許最少只使用最高3位。STM32的話就是使用了最高4位。并且4個相鄰的優(yōu)先級寄存器拼接成一個32位寄存器。中斷優(yōu)先級又分為搶占優(yōu)先級和子優(yōu)先級。STM32中,優(yōu)先級寄存器中高四位中的高兩位說明搶占優(yōu)先級,低兩位說明子優(yōu)先級。搶占優(yōu)先級的話就是能打斷低搶占優(yōu)先級的中斷,從而實現(xiàn)中斷嵌套。

          下面也是截圖看看優(yōu)先級有哪幾種分配情況。

          下面的截圖說明優(yōu)先級如何確定和嵌套規(guī)則。

          關于那幾個需要掌握的與中斷寄存器,還有一個截圖:

          下面的截圖關于中斷是如何建立的:

          當然還有一些其它跟中斷相關的寄存器,不是很常用,就沒寫在這里了。

          那么現(xiàn)在具體說說這個優(yōu)先級配置函數(shù),函數(shù)定義實現(xiàn)如下:

          1. /**
          2. *@briefConfigurestheprioritygrouping:pre-emptionpriorityandsubpriority.
          3. *@paramNVIC_PriorityGroup:specifiestheprioritygroupingbitslength.
          4. *Thisparametercanbeoneofthefollowingvalues:
          5. *@argNVIC_PriorityGroup_0:0bitsforpre-emptionpriority
          6. *4bitsforsubpriority
          7. *@argNVIC_PriorityGroup_1:1bitsforpre-emptionpriority
          8. *3bitsforsubpriority
          9. *@argNVIC_PriorityGroup_2:2bitsforpre-emptionpriority
          10. *2bitsforsubpriority
          11. *@argNVIC_PriorityGroup_3:3bitsforpre-emptionpriority
          12. *1bitsforsubpriority
          13. *@argNVIC_PriorityGroup_4:4bitsforpre-emptionpriority
          14. *0bitsforsubpriority
          15. *@retvalNone
          16. */
          17. voidNVIC_PriorityGroupConfig(uint32_tNVIC_PriorityGroup)
          18. {
          19. /*Checktheparameters*/
          20. assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));
          21. /*SetthePRIGROUP[10:8]bitsaccordingtoNVIC_PriorityGroupvalue*/
          22. SCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;
          23. }

          此函數(shù)在misc.c原文件中,函數(shù)只有兩句話。其中

          1. assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));

          assert_param是定義的一個宏,用來檢測表達式的正確性。如果表達式正確則什么也不做,繼續(xù)執(zhí)行下面的語句。如果參數(shù)有錯,就會在當前行報錯。這里主要檢測我們輸入的NVIC配置優(yōu)先級是否有效。

          [cpp]view plaincopy
          print?
          1. /*SetthePRIGROUP[10:8]bitsaccordingtoNVIC_PriorityGroupvalue*/
          2. SCB->AIRCR=AIRCR_VECTKEY_MASK|NVIC_PriorityGroup;

          這句話才是關鍵,實現(xiàn)了優(yōu)先級的配置。其中AIRCR_VECTKEY_MASK相當于個鑰匙,用一個宏實現(xiàn)。在此源文件的開始處聲明,其值為:

          1. #defineAIRCR_VECTKEY_MASK((uint32_t)0x05FA0000)

          因為NVIC是個很關鍵的寄存器,不能隨便配置,于是需要一個輸入標記才能進行正確配置,此標記就相當于一把鑰匙。其中NVIC_PriorityGroup值的選擇就是函數(shù)上方中那些宏,一共有5種情況。

          1. /**
          2. *@briefConfigurestheprioritygrouping:pre-emptionpriorityandsubpriority.
          3. *@paramNVIC_PriorityGroup:specifiestheprioritygroupingbitslength.
          4. *Thisparametercanbeoneofthefollowingvalues:
          5. *@argNVIC_PriorityGroup_0:0bitsforpre-emptionpriority
          6. *4bitsforsubpriority
          7. *@argNVIC_PriorityGroup_1:1bitsforpre-emptionpriority
          8. *3bitsforsubpriority
          9. *@argNVIC_PriorityGroup_2:2bitsforpre-emptionpriority
          10. *2bitsforsubpriority
          11. *@argNVIC_PriorityGroup_3:3bitsforpre-emptionpriority
          12. *1bitsforsubpriority
          13. *@argNVIC_PriorityGroup_4:4bitsforpre-emptionpriority
          14. *0bitsforsubpriority
          15. *@retvalNone
          16. */

          另外發(fā)現(xiàn)現(xiàn)在有很多實時系統(tǒng)都是根據(jù)Cortex-M3內(nèi)核量身訂造的,想必其強大的NVIC就是其中一個原因吧。


          關鍵詞: Cortex-M3中

          評論


          相關推薦

          技術(shù)專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();