一,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 引腳...