stm32 SCB->AIRCR 寄存器和中斷優先級寄存器使用理解

參考:

Cortex M3權威指南(中文).pdf

STM32F4xx中文參考手冊.pdf

STM32F4開發指南-寄存器版本_V1.1.pdf

https://blog.csdn.net/rng_uzi_/article/details/90762767

記住:搶佔和響應的值越小級別越高。

首先stm32的中斷有240個,中斷優先級分兩級搶佔和響應。兩種級別,規則如下,需要記住

高搶佔可以打斷低搶佔

高響應不能打斷低響應(同一搶佔級,處理內部的優先級)

中斷7:搶佔:2響應:0

中斷3:搶佔:2響應:1

同搶佔級別,同時發生中斷,響應級別的高先執行,(不是打斷)

中斷6:搶佔:3:響應0

上面例子中的中斷 3 和中斷 7 都可以打斷中斷 6 的中斷。而中斷 7 和中斷 3 卻不可以相互
打斷!

 

設置搶佔和響應級別

 

 SCB->AIRCR 寄存器和IP寄存器

首先兩者聯繫,SCB->AIRCR 寄存器的10:8位bit,決定了,IP寄存器4:7bit的高四位的搶佔與響應位的分配

讀一讀關於IP寄存器的描述,子優先級就是響應優先級

 

那麼SCB->AIRCR 寄存器的10:8位bit怎麼決定這個分配呢?

AIRCR 寄存器的10:8位,設置幾位搶佔,幾位響應。舉例如下

AIRCR寄存器8:10與IP寄存器4:7
  AIRCR寄存器8:10 IP寄存器4:7  
0 111 搶佔:0bit,響應:4bit  
1 110 搶佔:1bit,響應:3bit  
2 101 搶佔:2bit,響應:2bit  
3 100 搶佔:3bit,響應:1bit  
4 011 搶佔:4bit,響應:0bit  

 怎麼理解這個表呢?

AIRCR寄存器8:10是111,表示7,即ip寄存器的第四位到第七位爲止是響應級(從0開始),本來就ip寄存器的4:7bit,那4,5,6,7bit,都表示響應級。

AIRCR寄存器8:10是100,表示4,ip寄存器的第四位到第四位表示響應級。即一位表示響應級

實例代碼  0x05FA0000 看上面圖片表D13

 

  SCB->AIRCR = 0x05FA0000 | 0x400;  //  04h=0100b  中斷優先級分組 搶佔:響應=3:1

 

那麼最多就是0:15級搶佔,就是15箇中斷可相互打斷,即011,沒有響應級  ,4組

如果全是響應,那麼哪個高,那個先發生,先執行哪個。即111,第七位以內都是響應級,4:7bit都表示,0組

舉例:這是正點原子外部中斷實驗的優先級設置代碼,兩位的優先級,4,5,即101,第五位以內都是響應級

	MY_NVIC_Init(3,2,EXTI2_IRQn,2);		//搶佔3,子優先級2,組2
	MY_NVIC_Init(2,2,EXTI3_IRQn,2);		//搶佔2,子優先級2,組2	   
	MY_NVIC_Init(1,2,EXTI4_IRQn,2);		//搶佔1,子優先級2,組2	   
	MY_NVIC_Init(0,2,EXTI0_IRQn,2);		//搶佔0,子優先級2,組2	

這裏設置爲組2,即:AIRCR寄存器的8:10bit,101。則IP寄存器4:7bit,第6,7bit爲設置搶佔優先級,4,5bit設置響應優先級

那麼就是,4級搶斷,4種響應。所以所有中斷的級別都沒有超過2^2=4。只有0,1,2,3級。

 

應用:

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先級分組 搶佔:響應=3:1

8,9,10bit,爲100,ip寄存器高四位的4位是響應,5,6,7位是搶佔

ip寄存器,8bit寄存器,只用了高四位,111搶佔,1響應。

2^3=8級搶斷,2級響應
    
  NVIC->IP[39] = 0xf0; //最低搶佔優先級,最低響應優先級1111

39號中斷,最高級中斷,沒有中斷的能打斷。

參考手冊表49,查相應中斷的位置。


 NVIC->ISER[1] |= (1<<(39-32)); //使能中斷線39,也就是usart3中斷

256箇中斷,每個ISER,32位寄存器,控制32箇中斷。需要8個ISER,即ISER[8]寄存器組。

39號中斷,在ISER[1],32,33,34,335,36,37,38,39。第七位置一

39-32=7

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章