STM32_NVIC寄存器詳解


在MDK內,與NVIC相關的寄存器,MDK為其定義了如下的結構體:  
typedef struct  
{     
   vu32   ISER[2];    //2個32位中斷使能寄存器分別對應到60個可屏蔽中斷   
   u32     RESERVED0[30];           
   vu32   ICER[2];   //2個32位中斷除能寄存器分別對應到60個可屏蔽中斷   
   u32    RSERVED1[30];    
   vu32   ISPR[2];   //2個32位中斷掛起寄存器分別對應到60個可屏蔽中斷,可掛起正在執行的中斷   
   u32     RESERVED2[30];    
   vu32   ICPR[2];   //2個32位中斷解掛寄存器分別對應到60個可屏蔽中斷,可解除被掛起的中斷    
   u32     RESERVED3[30];    
   vu32   IABR[2];    //2個32位中斷激活標志寄存器,可讀取該寄存器判斷當前執行的中斷是哪個,中斷執行完硬件清零,只讀    
   u32     RESERVED4[62];    
   vu32   IPR[15];    //15個32位中斷優先級分組寄存器,每個中斷分配8個bit,對應到4*15=60個中斷 
} NVIC_TypeDef;

IPR[15]    
15個32位中斷優先級分組寄存器,每個中斷分配8個bit,對應到4*15=60個中斷。但是並不是8個bit都被使用了,而是僅僅只用到了高四位,這樣就可以得到5組16級的中斷優先級。

高位的4個bit又分為搶占優先級和子優先級,搶占優先級在前,子優先級在后。兩種類型優先級占用的位數又可以通過SCB->AIRCR寄存器的bit[10:8]來配置。

數字越小優先級越高,高優先級的中斷可以中斷低優先級的中斷,但是搶占優先級相同時子優先級高的無法中斷子優先級低的中斷。

結合實例說明一下:假定設置中斷優先級組為2,然后設置中斷28(Tim2中斷)的搶占優先級為3,響應優先級為2。中斷6(外部中斷0)的搶占優先級為4,響應優先級為0。中斷7(外部中斷1)的搶占優先級為3,響應優先級為0。那么這3個中斷的優先級順序為:中斷7>中斷28>中斷6。  

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM