Cortex-M 中斷
Cortex-M 內(nèi)核(STM32)的 MCU 提供了一個(gè)用于中斷管理的嵌套向量中斷控制器(NVIC)。Cotex-M3 的 NVIC 最多支持 240 個(gè) IRQ(中斷請(qǐng)求)、1 個(gè)不可屏蔽中斷(NMI)、1 個(gè) Systick(滴答定時(shí)器)定時(shí)器中斷和多個(gè)系統(tǒng)異常。
Cortex-M 處理器有多個(gè)用于管理中斷和異常的可編程寄存器,這些寄存器大多數(shù)都在 NVIC 和系統(tǒng)控制塊(SCB)中,CMSIS 將這些寄存器定義為結(jié)構(gòu)體。以 STM32F103 為例,打開(kāi) core_cm3.h,有兩個(gè)結(jié)構(gòu)體,NVIC_Type 和 SCB_Type,就存儲(chǔ)了這些信息。
優(yōu)先級(jí)分組定義
當(dāng)多個(gè)中斷來(lái)臨的時(shí)候處理器應(yīng)該響應(yīng)哪一個(gè)中斷是由中斷的優(yōu)先級(jí)來(lái)決定的,高優(yōu)先級(jí)的中斷(優(yōu)先級(jí)編號(hào)小)肯定是首先得到響應(yīng),而且高優(yōu)先級(jí)的中斷可以搶占低優(yōu)先級(jí)的中斷,這個(gè)就是中斷嵌套。
Cortex-M 處理器的有些中斷是具有固定的優(yōu)先級(jí)的,比如復(fù)位、NMI、HardFault,這些中斷的優(yōu)先級(jí)都是負(fù)數(shù),優(yōu)先級(jí)也是最高的。
Cortex-M 處理器有三個(gè)固定優(yōu)先級(jí)和 256 個(gè)可編程的優(yōu)先級(jí),最多有 128 個(gè)搶占等級(jí),但是實(shí)際的優(yōu)先級(jí)數(shù)量是由芯片廠商來(lái)決定的。但是,絕大多數(shù)的芯片都會(huì)精簡(jiǎn)設(shè)計(jì)的,以致實(shí)際上支持的優(yōu)先級(jí)數(shù)會(huì)更少,如 8 級(jí)、16 級(jí)、32 級(jí)等,比如 STM32 就只有 16 級(jí)優(yōu)先級(jí)。
FreeRTOS 中斷配置宏
1、configPRIO_BITS:設(shè)置 MCU 使用幾位優(yōu)先級(jí),STM32 使用的是 4 位,因此此宏為 4
2、configLIBRARY_LOWEST_INTERRUPT_PRIORITY :設(shè)置最低優(yōu)先級(jí)。
3、configKERNEL_INTERRUPT_PRIORITY:此宏用來(lái)設(shè)置內(nèi)核中斷優(yōu)先級(jí)。
4、configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY:來(lái)設(shè)置 FreeRTOS 系統(tǒng)可管理的最大優(yōu)先級(jí),是高于 x 的優(yōu)先級(jí)不歸 FreeRTOS 管理!
5、configMAX_SYSCALL_INTERRUPT_PRIORITY:低于此優(yōu)先級(jí)的中斷可以安全的調(diào)用 FreeRTOS 的 API 函數(shù),高于此優(yōu)先級(jí)的中斷 FreeRTOS 是不能禁止的,中斷服務(wù)函數(shù)也不能調(diào)用 FreeRTOS 的 API 函數(shù)!
-
處理器
+關(guān)注
關(guān)注
68文章
19349瀏覽量
230284 -
嵌入式
+關(guān)注
關(guān)注
5087文章
19148瀏覽量
306171 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1377瀏覽量
40326 -
STM32
+關(guān)注
關(guān)注
2270文章
10910瀏覽量
356605 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62229
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論