資源描述:
《STM NVIC中斷優(yōu)先級》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、STM32中斷優(yōu)先級以及全局允許和禁止優(yōu)先級可以被分為高低兩個位段,分別是搶占優(yōu)先級和亞優(yōu)先級Cortex-M3允許具有較少中斷源時使用較少的寄存器位指定中斷源的優(yōu)先級,因此STM32把指定中斷優(yōu)先級的寄存器位減少到4位AIRC中PRIGROUP的值規(guī)定了設(shè)置和確定每個外部中斷通道優(yōu)先級的格式。例如,在上面將0x05寫入了AIRC中PRIGROUP,也就規(guī)定了當(dāng)前系統(tǒng)中只能有4個搶先式優(yōu)先級,相同的搶先式優(yōu)先級下還可以有4個不同級別的子優(yōu)先級,他們分別為:位[7:6]??????????????????位[5:4]?????????????????位[3:0]00?????
2、???0號搶先優(yōu)先級??00???????0號子優(yōu)先級???無效01????????1號搶先優(yōu)先級??01???????1號子優(yōu)先級???無效10????????2號搶先優(yōu)先級??10???????2號子優(yōu)先級???無效11????????3號搶先優(yōu)先級??11???????3號子優(yōu)先級???無效在Cortex—M3的優(yōu)先級分配中,較低的優(yōu)先級值具有較高的優(yōu)先級。數(shù)值小的優(yōu)先級高,數(shù)值大的優(yōu)先級低a只能高搶先優(yōu)先級的中斷可以打斷低搶先優(yōu)先級的中斷服務(wù),構(gòu)成中斷嵌套。b當(dāng)2(n)個相同搶先優(yōu)先級的中斷出現(xiàn),它們之間不能構(gòu)成中斷嵌套,但STM32首先響應(yīng)子優(yōu)先級高的中斷。c當(dāng)2
3、(n)個相同搶先優(yōu)先級和相同子優(yōu)先級的中斷出現(xiàn),STM32首先響應(yīng)中斷通道所對應(yīng)的中斷向量地址低的那個中斷??梢酝ㄟ^調(diào)用STM32的固件庫中的函數(shù)NVIC_PriorityGroupConfig()選擇使用哪種優(yōu)先級分組方式,這個函數(shù)的參數(shù)有下列5種:NVIC_PriorityGroup_0=>選擇第0組NVIC_PriorityGroup_1=>選擇第1組NVIC_PriorityGroup_2=>選擇第2組NVIC_PriorityGroup_3=>選擇第3組NVIC_PriorityGroup_4=>選擇第4組第0組:所有4位用于指定響應(yīng)優(yōu)先級??(從不嵌套)第1組:
4、最高1位用于指定搶占式優(yōu)先級,最低3位用于指定響應(yīng)優(yōu)先級第2組:最高2位用于指定搶占式優(yōu)先級,最低2位用于指定響應(yīng)優(yōu)先級第3組:最高3位用于指定搶占式優(yōu)先級,最低1位用于指定響應(yīng)優(yōu)先級第4組:所有4位用于指定搶占式優(yōu)先級(最大的嵌套可能性)(類似于STR710)subpriority?開始的位號:如果從7號開始那么沒有pre-emptionpriority,[?b7b6b5b4]?全部為subpriority?如果從?6號開始那么[b7]為?pre-emptionpriority,[b6b5b4]?為subpriority?如果從?3號開始那么[b7b6b5?b4?]為?p
5、re-emptionpriority,?沒有subpriority?[pre-emptionpriority]::[subpriority?](STM32共計4位)所以無論如何配置做多只能有16級,數(shù)值最小的具有最高的優(yōu)先級在程序中合理按排中斷優(yōu)先級可以達到具有高搶占式優(yōu)先級的中斷可以在具有低搶占式優(yōu)先級的中斷處理過程中被響應(yīng),即中斷嵌套,或者說高搶占式優(yōu)先級的中斷可以嵌套低搶占式優(yōu)先級的中斷。要注意的幾點是:1)如果指定的搶占式優(yōu)先級別或響應(yīng)優(yōu)先級別超出了選定的優(yōu)先級分組所限定的范圍,將可能得到意想不到的結(jié)果;2)搶占式優(yōu)先級別相同的中斷源之間沒有嵌套關(guān)系;3)如果某個中
6、斷源被指定為某個搶占式優(yōu)先級別,又沒有其它中斷源處于同一個搶占式優(yōu)先級別,則可以為這個中斷源指定任意有效的響應(yīng)優(yōu)先級別。#defineNVIC_PriorityGroup_0????????((uint32_t)0x700)/*!<0bitsforpre-emptionpriority???????????????????????????????????????????????????????????4bitsforsubpriority*/#defineNVIC_PriorityGroup_1????????((uint32_t)0x600)/*!<1bitsforpre
7、-emptionpriority???????????????????????????????????????????????????????????3bitsforsubpriority*/#defineNVIC_PriorityGroup_2????????((uint32_t)0x500)/*!<2bitsforpre-emptionpriority???????????????????????????????????????????????????????????2bitsforsubpriority*/#