<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

了解Cortex-M3的中斷

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

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

本文引用地址:http://dyxdggzs.com/article/201611/319099.htm

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

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

關(guān)于中斷使能與禁能

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

下面的截圖說(shuō)的是關(guān)于懸起與解懸寄存器

中斷優(yōu)先級

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

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

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

關(guān)于那幾個(gè)需要掌握的與中斷寄存器,還有一個(gè)截圖:

下面的截圖關(guān)于中斷是如何建立的:

當然還有一些其它跟中斷相關(guān)的寄存器,不是很常用,就沒(méi)寫(xiě)在這里了。

那么現在具體說(shuō)說(shuō)這個(gè)優(yōu)先級配置函數,函數定義實(shí)現如下:

  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. }

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

  1. assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));

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

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

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

  1. #defineAIRCR_VECTKEY_MASK((uint32_t)0x05FA0000)

因為NVIC是個(gè)很關(guān)鍵的寄存器,不能隨便配置,于是需要一個(gè)輸入標記才能進(jìn)行正確配置,此標記就相當于一把鑰匙。其中NVIC_PriorityGroup值的選擇就是函數上方中那些宏,一共有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ā)現現在有很多實(shí)時(shí)系統都是根據Cortex-M3內核量身訂造的,想必其強大的NVIC就是其中一個(gè)原因吧。


關(guān)鍵詞: Cortex-M3中

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>