很多朋友對(duì)中斷的一些知識(shí)還是不了解,今天就寫點(diǎn)關(guān)于Cortex-M3處理器中斷相關(guān),以及FreeRTOS中斷優(yōu)先級(jí)配置的內(nèi)容。
1寫在前面
寫本文之前,先寫點(diǎn)相關(guān)的擴(kuò)展內(nèi)容。
STM32屬于ARM中Cortex-M系列處理器,比如:STM32F1數(shù)據(jù)Cortex-M3,STM32F7數(shù)據(jù)Cortex-M7。
可以參看我之前分享文章:從Cortex-M到Cortex-A認(rèn)識(shí)ARM處理器,了解一下關(guān)于ARM處理器的種類。
本文主要結(jié)合Cortex-M3下面STM32F1系列處理器為例來講述中斷控制相關(guān)內(nèi)容。而Cortex-M其它系列,或者說STM32其它系列關(guān)于中斷的內(nèi)容類似。
Cortex-M3只是STM32F1的一個(gè)內(nèi)核。反過來說STM32F1是在Cortex-M3基礎(chǔ)上增加了一些外設(shè)(如:USART、AD等)的芯片。
2
STM32中斷控制
NVIC:Nested Vectored Interrupt Controller,即嵌套向量中斷控制器。
STM32中NVIC我們比較熟悉,編程的時(shí)候使用中斷都會(huì)對(duì)NVIC進(jìn)行配置。
而STM32F1中的NVIC是屬于Cortex-M3中的一部分,而不是STM32增加的外設(shè)。
NVIC向量中斷控制器是Cortex‐M3不可分離的一部分,它與 CM3 內(nèi)核的邏輯緊密耦合,有一部分甚至水乳交融在一起。
所以,NVIC相關(guān)的寄存器位于Cortex-M手冊(cè)中。講述STM32的中斷控制,還得從Cortex-M3的NVIC講起,
1.中斷輸入向量表
Cortex-M3的NVIC支持1至240個(gè)中斷輸入,比如STM32中xxxIRQs,也就是中斷向量表,具體的數(shù)值由芯片廠商在設(shè)計(jì)芯片時(shí)決定。
比如STM32F1的中斷和異常向量表:
2.中斷和異常區(qū)別
很多初學(xué)的朋友不知道什么是中斷?什么是異常?甚至有人直接把中斷和異常籠統(tǒng)稱為“中斷”。
中斷和異常其實(shí)有差異,也有關(guān)聯(lián),我們常說的中斷其實(shí)是包含了異常。異常可以理解為MCU,或者程序處于了某種異常狀態(tài)。
這么區(qū)分吧,看上面向量表,上部分有灰色背景的為異常,下部分白色的為中斷。
異常屬于Cortex‐M3內(nèi)核的一部分,而中斷屬于MCU(STM32)的一部分(由廠家決定)。
所以:
1.站在Cortex‐M3內(nèi)核角度,像STM32中USART這類中斷,屬于外部中斷。
2.站在STM32角度,EXTI外部引腳中斷才屬于中斷。
3.優(yōu)先級(jí)
對(duì)于Cortex-M3來說,每個(gè)外部中斷都有一個(gè)對(duì)應(yīng)的優(yōu)先級(jí)寄存器。
每個(gè)寄存器占用8位,但是允許最少只使用最高3位,在STM32F1中使用了高4位。(也就是我們可以分16個(gè)優(yōu)先級(jí))
優(yōu)先級(jí)可以被分為高低兩個(gè)位段,分別是搶占優(yōu)先級(jí)和亞(響應(yīng))優(yōu)先級(jí)。
提示:
1.STM32中斷優(yōu)先級(jí)數(shù)值越小,優(yōu)先級(jí)越大。
2.優(yōu)先級(jí)分組:Cortex-M3,M4具有分組功能,即存在搶占優(yōu)先級(jí)和響應(yīng)優(yōu)先級(jí),如下圖:
而有的內(nèi)核就沒有,如Cortex-M0就沒有。
3.參考資料
可以參看《Cortex-M3權(quán)威指南》
STM32的內(nèi)核編程手冊(cè):
http://www.st.com/stonline/products/literature/pm/15491.pdf
3
FreeRTOS中斷優(yōu)先級(jí)配置
本節(jié)內(nèi)容講述一下FreeRTOS最大中斷優(yōu)先級(jí)配置問題,也就是FreeRTOSConfig.h配置文件中的:
configMAX_SYSCALL_INTERRUPT_PRIORITY
你們知道配置數(shù)值的含義嗎?
這里就需要結(jié)合NVIC相關(guān)的內(nèi)容來理解。
上面說了,在STM32中,使用了NVIC優(yōu)先級(jí)的高4位,而我們配置時(shí)需要對(duì)高4位進(jìn)行配置(低4位未使用)。
看上圖,明白了嗎,上面這個(gè)數(shù)值就是95,但代表的優(yōu)先級(jí)為5。
這個(gè)配置數(shù)值的含義,大概意思是:你代碼中使用的中斷(比如USART1_IRQn)優(yōu)先級(jí)需要大于5才可行。
如下面配置,優(yōu)先級(jí)為2就不行(當(dāng)然,有分組的還牽涉到分組問題)。
提示:
FreeRTOS任務(wù)優(yōu)先級(jí)是數(shù)值越大,優(yōu)先級(jí)越高。需要和中斷優(yōu)先級(jí)區(qū)分開來。
-
處理器
+關(guān)注
關(guān)注
68文章
19432瀏覽量
231255 -
STM32
+關(guān)注
關(guān)注
2272文章
10925瀏覽量
357703 -
中斷
+關(guān)注
關(guān)注
5文章
900瀏覽量
41773
原文標(biāo)題:STM32中斷及FreeRTOS中斷優(yōu)先級(jí)配置知識(shí)!
文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
Cortex-M3處理器是什么
STM32的核心Cortex-M3處理器是什么
Cortex-M3處理器中斷與FreeRTOS中斷優(yōu)先級(jí)配置
STM32(Cortex-M3)中的優(yōu)先級(jí)概念
STM32的核心Cortex-M3處理器的標(biāo)準(zhǔn)化是什么意思
FreeRTOS中斷優(yōu)先級(jí)和任務(wù)優(yōu)先級(jí)架構(gòu)的相關(guān)資料推薦
STM32的Cortex-M3中斷異常處理
![STM32的<b class='flag-5'>Cortex-M3</b><b class='flag-5'>中斷</b>異常<b class='flag-5'>處理</b>](https://file.elecfans.com/web1/M00/6E/C0/o4YBAFvudoCAMkjDAACYuUJmd9A510.jpg)
2.FreeRTOS中斷優(yōu)先級(jí)和任務(wù)優(yōu)先級(jí)
![2.<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>和任務(wù)<b class='flag-5'>優(yōu)先級(jí)</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
FREERTOS中斷組屏蔽實(shí)驗(yàn)
![<b class='flag-5'>FREERTOS</b><b class='flag-5'>中斷</b>組屏蔽實(shí)驗(yàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32筆記之中斷優(yōu)先級(jí)和開關(guān)總中斷
![STM32筆記之<b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b>和開關(guān)總<b class='flag-5'>中斷</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Cortex-M中斷及FreeRTOS中斷優(yōu)先級(jí)配置原理
![<b class='flag-5'>Cortex-M</b><b class='flag-5'>中斷</b>及<b class='flag-5'>FreeRTOS</b><b class='flag-5'>中斷</b><b class='flag-5'>優(yōu)先級(jí)</b><b class='flag-5'>配置</b>原理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論