FreeRTOS之Cortex M中斷管理

2022-09-01 20:00:22 字數 1187 閱讀 9946

一,cortex-m核心的mcu都有nvic

1,中斷是由硬體產生的。

2,與中斷有關的暫存器都在nvic和scb中。只能在特權級下訪問。

3,cortex-m3和m4的nvic最多支援240個irq、1個nmi、乙個systick定時器中斷和多個系統異常。

4,在stm32f407的軟體工程的啟動檔案中,有中斷向量表。(可從其看出有多少個中斷和中斷型別)

5,在使用freertos,需要注意這兩個中斷型別的中斷優先順序:pendsv和systick

6,二,nvic

2,nvic的結構體:nvic_type

3,中斷暫存器

iser[8]   0xe000e100ul

icer[8]   0xe000e100ul+0x080ul

ispr[8]   0xe000e100ul+0x100ul

icpr[8]   0xe000e100ul+0x180ul

iabr[8]   0xe000e100ul+0x200ul

ip[240]    0xe000e100ul+0x300ul

stir     0xe000e100ul+0xe00ul

三,優先順序

1,cortex-m核心的mcu

3,優先順序的數值越小,則優先順序越高。

4,3個系統異常:復位、nmi、硬體fault有固定的優先順序,高於所有其它異常。

5,對cortex-m核心的st mcu來說,使用優先順序配置暫存器的高四位來表達優先順序,即使用16級優先順序。

6,對stm32來說,有效的優先順序組有5組: 分組3、分組4、分組5、分組6、分組7。(對應到stm32f407的庫函式版本中,則依次為:系統中斷優先順序分組4 3 2 1 0)

7,使用freertos,推薦使用系統中斷優先順序分組4。即使用優先順序配置暫存器的高四位來表達搶占優先順序,共16級搶占級別。數值越小,優先順序越高,方便使用。

8,為什麼在設定暫存器的時候,使用了間隔的計算方法,而不是直接幅值?(角度:**可讀性)

四,aircr

五,scb

六,在freertos中,經常使用basepri來遮蔽中斷

1,basepri,只遮蔽優先順序低於某一閥值的中斷(優先順序在數字上大於等於某個數)。

例如:mov r0,#5

msr basepri,r0

表示:0-4優先順序的中斷不可被遮蔽,5-15優先順序的中斷被遮蔽

FreeRTOS 低功耗之 tickless 模式

反映在 freertos 上,tickless 又是怎樣一種情況呢?我們都知道,當使用者任務都被掛起或者阻塞時,最低優先順序的空閒任務會得到執行。那麼 stm32 支援的睡眠模式,停機模式就可以放在空閒任務裡面實現。但是,為了實現低功耗最優設計,我們還不能直接把睡眠或者停機模式直接放在空閒任務裡。進...

FreeRTOS入門 FreeRTOS移植

開啟keil工程,新建資料夾freertos core freertos portable 將原始碼根目錄下所有c檔案新增進freertos core 將portable rvds arm cm4f下的prot.c portable memmang 的heap 4.c檔案新增進去 新增include...

FreeRTOS 低功耗之待機模式

stm32f103 如何進入待機模式 在 freertos 系統中,讓 stm32 進入待機模式比較容易,呼叫韌體庫函式pwr enterstandbymode 即可。stm32f103 如何退出待機模式 讓 stm32 從待機模式喚醒可以通過外部復位 nrst 引腳 iwdg 復位 wkup 引腳...