ARM Cortex-M3 異常優先級以及CMSIS RTOS RTX的中斷優先級


通常異常包括一些系統異常,以及中斷。

異常類型

Cortex-M3處理器支持多種類型的異常:

  1. RESET, NMI, HardWare Fault;
  2. PSV,SVC等可編程中斷;
  3. 其他的可編程中斷,例如timer,GPIO等。

其中第1類異常的優先級是固定,不可改變的。其他都是可以修改的。

Cortex-M3處理器提供了PRIMASK選項,用來屏蔽所有可編程的中斷;提供了FAULTMASK來屏蔽HardWare Fault和所有可屏蔽中斷。

異常優先級

Cortex-M3處理器支持NVIC的中斷處理,也就是說中斷嵌套處理。中斷的優先級由1個8bit寄存器確定,但ARM芯片廠商在實現的時候通常實現了其中的幾個bit而已。ARM要求最少實現3個bit。從寄存器的bit 7開始從高往低。

而這幾個bit還會分為搶占優先級,普通優先級。見下圖:

搶占優先級,是指如果兩個中斷的普通優先級一樣,在搶占優先級低的中斷A執行時,如果搶占優先級高的中斷B發生了,那么就會中斷B就會搶占中斷A,處理器開始執行中斷B的ISR。

普通優先級,是指如果兩個中斷的搶占優先級一樣,那么中斷之間是不會發生搶占的,也就是一個中斷不會打斷另外一個中斷的處理。但是如果兩個中斷同時發生了,普通優先級高的,先處理。

數字越小,優先級越高。

如果兩個中斷搶占優先級,普通優先級全部一樣,那么中斷號小的中斷,會先處理,但還是不會發生搶占。

異常向量

根據cortex-M3的技術文檔描述,異常向量"vector tables"是放在從地址0x4開始的地方,地址0x0處放的是MSP的初始值。

如下所示,異常向量對應的地址處直接放置的異常處理函數地址,而不是跳轉指令。

CMSIS RTOS RTX的中斷優先級

由於ARM公司后來搞了CMSIS,也就是在CMSIS層增加了對RTOS的支持。所以很多種RTOS都可以依靠CMSIS RTOS API來實現。

而ARM也把Keil RTX操作系統,也改裝成支持CMSIS了,就叫CMSIS RTOS RTX了。

在RTX里面,systick timer/SVC/PSV的中斷優先級都是0xFF(具體對應到硬件,要看芯片廠商實現了8bit優先級的幾個bit),所以其實他們的優先級都是一樣的,並且相互不搶占。

用戶可以配置其他可編程優先級,不要求是


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM