cm3 核心支援 256 個中斷,stm32 並沒有使用 cm3 核心的全部只用了它的一部分。
stm32 有 84 個中斷,包括 16 個核心中斷和 68 個可遮蔽中斷,stm32f103 系列上面只有 60 個(107 系列才有 68 個)。下面針對stm32f103 系列說明。
與 nvic 相關的暫存器中ipr[15]:是乙個中斷優先順序控制的暫存器組由15個32bit的暫存器組成.
每乙個可遮蔽中斷對應8bit。所以每乙個32bit暫存器對應4個可遮蔽中斷:15*4=60。
ipr[0]的[31~24], [23~16], [15~8], [7~0]分別對應 3~0,4個可遮蔽中斷,依次類推,總共對應 60 個外部中斷。
每個中斷對應的8bit只使用了高4位。這4位又分為搶占優先順序和子優先順序。搶占優先順序和子優先順序各佔幾位由scb->aircr 暫存器的 bit7~4來定義的。
stm32 又將中斷分為 5 個組,組 0~4。該分組的設定是由 scb->aircr 暫存器的 bit10~8 來定義的。具體的分配關係如表 所示:組
aircr[10: 8]
bit[7: 4]分配情況
分配結果 0
1110: 4
0 位搶占優先順序, 4 位響應優先順序 1
1101: 3
1 位搶占優先順序, 3 位響應優先順序 2
1012: 2
2 位搶占優先順序, 2 位響應優先順序 3
1003: 1
3 位搶占優先順序, 1 位響應優先順序 4
0114: 0
4 位搶占優先順序, 0 位響應優先順序
例如組設為3,那麼所有的60個中斷,每個中斷對應的暫存器高3位是搶占優先順序,低1位數響應優先順序。3位搶占優先順序可以選擇0~7,8種情況。1位響應優先順序可以選擇0或1兩種選擇。搶占優先級別高於響應優先級別,數值越小代表的優先順序就越高。
優先順序的工作情況:
1、當搶占優先順序和響應優先順序一樣時,哪個中斷先發生就執行哪個。
2、高優先順序的搶占優先順序中斷可以打斷低優先順序的搶占優先順序中斷
3、搶占優先順序相同時,高優先順序的響應優先順序中斷不可以打斷低優先順序的響應優先順序中斷。
例如:1、設定中斷優先順序組為2。2位搶占優先順序(0~4),2位響應優先順序(0~4)
2、設定中斷3(rtc 中斷)的搶占優先順序為 2,響應優先順序為 1。
3、設定中斷 6(外部中斷 0)的搶占優先順序為 3,響應優先順序為 0。
4、設定中斷 7(外部中斷 1)的搶占優先順序為 2,響應優先順序為 0。
那麼這 3 個中斷的優先順序順序為:中斷 7>中斷 3>中斷 6。中斷7和3可以打斷中斷6,中斷3和7不可以打斷對方。
中斷優先順序設定的步驟:
1、系統執行開始時設定中斷分組。確定組號,也就是確定搶占優先順序和子優先順序的分配位數。 呼叫函式為 void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup)
可以看出設定中斷分組就是設定scb->aircr暫存器。
2、設定所用到的中斷的中斷優先級別。 對每個中斷呼叫中斷初始化函式為
void nvic_init(nvic_inittypedef* nvic_initstruct);
結構體引數:
typedef struct
nvic_inittypedef;
例如:我們設定中斷優先順序分組值為2,
nvic_prioritygroupconfig(nvic_prioritygroup_2);
使能串列埠 1 的中斷,同時設定搶占優先順序為 1,子優先順序位 2,
usart_inittypedef usart_initstructure;
nvic_initstructure.nvic_irqchannel = usart1_irqn;//串列埠 1 中斷
nvic_initstructure.nvic_irqchannelpreemptionpriority=1 ;// 搶占優先順序為 1
nvic_initstructure.nvic_irqchannelsubpriority = 2;// 子優先順序位 2
nvic_initstructure.nvic_irqchannelcmd = enable; //irq 通道使能
nvic_init(&nvic_initstructure); //根據上面指定的引數初始化 nvic 暫存器
stm32中斷優先順序 STM32中斷系統
stm32 中斷非常強大,幾乎每個外設都可以產生中斷,因此這裡我們單獨使用一章來介紹它,為後面介紹外設中斷做鋪墊。學習本章可以參考 stm32f10x中文參考手冊 9 中斷和事件章節,cortex m3 權威指南 中文 chpt08 nvic與中斷控制章節。中斷概念 在學習 51 微控制器時,我們就...
STM32 中斷 優先順序設定
stm32中斷 優先順序設定 記性老差,前邊熟悉的東西,轉眼又忘了。今又翻開以前的筆記,重溫記錄如下 參考 記不清楚了 一 中斷優先順序概念 stm32 cortex m3 中有兩個優先順序的概念 搶占式優先順序和響應優先順序,有人把響應優先順序稱作 亞優先順序 或 副優先順序 每個中斷源都需要被指...
stm32 中斷優先順序配置
一 中斷優先順序概念 stm32 cortex m3 中有兩個優先順序的概念 搶占式優先順序和響應優先順序,有人把響應優先順序稱作 亞優先順序 或 副優先順序 每個中斷源都需要被指定這兩種優先順序。二 中斷響應次序 1 具有高搶占式優先順序的中斷可以在具有低搶占式優先順序的中斷處理過程中被響應,即中...