电竞比分网-中国电竞赛事及体育赛事平台

分享

我對STM32F10x NVIC中斷優(yōu)先級的理解

 walisef 2014-06-10
NVIC中斷優(yōu)先級的理解
      CM3支持硬件中斷嵌套,分為搶占式優(yōu)先級和亞優(yōu)先級,使用規(guī)則主要有,搶占優(yōu)先級高級別的可以打斷低級別的,同一級別的搶占優(yōu)先級同時發(fā)生時,亞當優(yōu)先級高的先發(fā)生中斷,若是相同,則按硬件排列順序發(fā)生。若是有一個亞優(yōu)先級正在執(zhí)行中斷,同一級別的其它亞優(yōu)先級發(fā)生時,則先掛起,等此中斷執(zhí)行完再執(zhí)行!
     從庫函數(shù)中找到優(yōu)先級分組模式:
#define NVIC_PriorityGroup_0         ((uint32_t)0x700) /* 0 bits for pre-emption priority
                                                          4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((uint32_t)0x600) /* 1 bits for pre-emption priority
                                                          3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((uint32_t)0x500) /* 2 bits for pre-emption priority
                                                          2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((uint32_t)0x400) /* 3 bits for pre-emption priority
                                                          1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((uint32_t)0x300) /* 4 bits for pre-emption priority
                                                          0 bits for subpriority */
從中可以看出第一組只有一個級別,16個亞優(yōu)先級,我可以這樣理解,若是分配成這個組里,不能發(fā)生嵌套中斷,同時發(fā)生中斷時,亞優(yōu)先級高的先發(fā)生,若有中斷執(zhí)行時,必須等中斷執(zhí)行完才能執(zhí)行下一個中斷。最后一組正好相反,有15個級別,若是執(zhí)行一個中斷,可以最多嵌套15個中斷執(zhí)行一個中斷。看下面的例子:
  NVIC_InitTypeDef    NVIC_InitStructure;  //定義中斷初始化類型結(jié)構(gòu)體變量
  
   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   //配置優(yōu)先級分組1 2個兩個搶占優(yōu)先級 8個亞優(yōu)先級
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //開口外部中斷0
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//配置0號搶占式優(yōu)先級  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//亞優(yōu)先級配置為0號
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
  NVIC_Init(&NVIC_InitStructure);     //對外部中斷0進行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; //開口外部中斷5到9
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1號搶占式優(yōu)先級  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亞優(yōu)先級配置為1號
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
  NVIC_Init(&NVIC_InitStructure);     //對外部中斷0進行初始化配置


  NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; //ADC1中斷
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//配置1號搶占式優(yōu)先級  
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//亞優(yōu)先級配置為1號
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
  NVIC_Init(&NVIC_InitStructure);     //對外部中斷0進行初始化配置


從上面的配置來看,外部中斷0的優(yōu)先級最高,可以打斷ADC和外部5到9的中斷,也就說可以嵌套發(fā)生,當ADC中斷和外部5到9中斷同時發(fā)生時,它們的搶占優(yōu)先級別相同,亞優(yōu)先級別也相同,因為ADC1硬件排在更靠前,則先發(fā)生ADC中斷,若是兩者任何一個中斷正在執(zhí)行,則等此中斷執(zhí)行完,再去執(zhí)行另一個中斷。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多