很多朋友對中斷的一些知識還是不了解,今天就寫點關于Cortex-M3處理器中斷相關,以及FreeRTOS中斷優先級配置的內容。
1寫在前面
寫本文之前,先寫點相關的擴展內容。
STM32屬于ARM中Cortex-M系列處理器,比如:STM32F1數據Cortex-M3,STM32F7數據Cortex-M7。
可以參看我之前分享文章:從Cortex-M到Cortex-A認識ARM處理器,了解一下關于ARM處理器的種類。
本文主要結合Cortex-M3下面STM32F1系列處理器為例來講述中斷控制相關內容。而Cortex-M其它系列,或者說STM32其它系列關于中斷的內容類似。
Cortex-M3只是STM32F1的一個內核。反過來說STM32F1是在Cortex-M3基礎上增加了一些外設(如:USART、AD等)的芯片。
2
STM32中斷控制
NVIC:Nested Vectored Interrupt Controller,即嵌套向量中斷控制器。
STM32中NVIC我們比較熟悉,編程的時候使用中斷都會對NVIC進行配置。
而STM32F1中的NVIC是屬于Cortex-M3中的一部分,而不是STM32增加的外設。
NVIC向量中斷控制器是Cortex‐M3不可分離的一部分,它與 CM3 內核的邏輯緊密耦合,有一部分甚至水乳交融在一起。
所以,NVIC相關的寄存器位于Cortex-M手冊中。講述STM32的中斷控制,還得從Cortex-M3的NVIC講起,
1.中斷輸入向量表
Cortex-M3的NVIC支持1至240個中斷輸入,比如STM32中xxxIRQs,也就是中斷向量表,具體的數值由芯片廠商在設計芯片時決定。
比如STM32F1的中斷和異常向量表:
2.中斷和異常區別
很多初學的朋友不知道什么是中斷?什么是異常?甚至有人直接把中斷和異常籠統稱為“中斷”。
中斷和異常其實有差異,也有關聯,我們常說的中斷其實是包含了異常。異常可以理解為MCU,或者程序處于了某種異常狀態。
這么區分吧,看上面向量表,上部分有灰色背景的為異常,下部分白色的為中斷。
異常屬于Cortex‐M3內核的一部分,而中斷屬于MCU(STM32)的一部分(由廠家決定)。
所以:
1.站在Cortex‐M3內核角度,像STM32中USART這類中斷,屬于外部中斷。
2.站在STM32角度,EXTI外部引腳中斷才屬于中斷。
3.優先級
對于Cortex-M3來說,每個外部中斷都有一個對應的優先級寄存器。
每個寄存器占用8位,但是允許最少只使用最高3位,在STM32F1中使用了高4位。(也就是我們可以分16個優先級)
優先級可以被分為高低兩個位段,分別是搶占優先級和亞(響應)優先級。
提示:
1.STM32中斷優先級數值越小,優先級越大。
2.優先級分組:Cortex-M3,M4具有分組功能,即存在搶占優先級和響應優先級,如下圖:
而有的內核就沒有,如Cortex-M0就沒有。
3.參考資料
可以參看《Cortex-M3權威指南》
STM32的內核編程手冊:
http://www.st.com/stonline/products/literature/pm/15491.pdf
3
FreeRTOS中斷優先級配置
本節內容講述一下FreeRTOS最大中斷優先級配置問題,也就是FreeRTOSConfig.h配置文件中的:
configMAX_SYSCALL_INTERRUPT_PRIORITY
你們知道配置數值的含義嗎?
這里就需要結合NVIC相關的內容來理解。
上面說了,在STM32中,使用了NVIC優先級的高4位,而我們配置時需要對高4位進行配置(低4位未使用)。
看上圖,明白了嗎,上面這個數值就是95,但代表的優先級為5。
這個配置數值的含義,大概意思是:你代碼中使用的中斷(比如USART1_IRQn)優先級需要大于5才可行。
如下面配置,優先級為2就不行(當然,有分組的還牽涉到分組問題)。
關于FreeRTOS最大優先級配置的內容可以參考:
https://www.freertos.org/RTOS-Cortex-M3-M4.html
提示:
FreeRTOS任務優先級是數值越大,優先級越高。需要和中斷優先級區分開來。
-
處理器
+關注
關注
68文章
19159瀏覽量
229115 -
STM32
+關注
關注
2266文章
10871瀏覽量
354789 -
FreeRTOS
+關注
關注
12文章
483瀏覽量
62001 -
Cortex-M3
+關注
關注
9文章
269瀏覽量
59428
發布評論請先 登錄
相關推薦
評論