首页 > 其他 > 详细

STM32学习之路-中断优先级<NIVC(2)>

时间:2014-05-18 05:45:03      阅读:478      评论:0      收藏:0      [点我收藏+]

优先级的问题可以分为以下情况:

抢占优先级和响应优先级

(1)抢占优先级高的可以打断抢占优先级低的,形成嵌套.

(2)抢占优先级相同时,看响应优先级.如果两个中断前后发生的话,后来的中断不能打断前一个中断

只能等,如果两个中断同时发生的话,则响应优先级高的先响应.

(3)抢占级别和响应级别都一样时,按照中断的地址来响应,地址低的先响应

这样就解决了优先级的问题.

哪个级别高呢?  0>1>2>...... 

STM32共有5组分别是0-4组,还是借那个图

bubuko.com,布布扣

可以看到第4组所有的位都用来设置抢占式优先级了(占先式),所以它能嵌套15个中断,然后自身一个中断,一次类推

0组只有响应式优先级,所以它不能嵌套任何中断,也就是这个组别的中断不能打断任何的其他在运行的中断.

配置NIVC的例子

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
    
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //配置组别
  
  /* Enable the EXTI9-5 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel =EXTI9_5_IRQn;	     //配置哪个中断			 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级	     
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;	    //优先响应级		   
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;	    //使能			 
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;				
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	     
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;			  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				 
  NVIC_Init(&NVIC_InitStructure);

  NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;				 
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;	     
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;			   
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;				
  NVIC_Init(&NVIC_InitStructure);
}
这里的配置中3个中断的抢占级别是一样的,都是0,所以谁都不能打断谁,优先响应级别是EXTI3_IRQn最高,

EXTI3_IRQn的值是多少呢,在stm32f10x.h中可以看到

bubuko.com,布布扣



STM32学习之路-中断优先级<NIVC(2)>,布布扣,bubuko.com

STM32学习之路-中断优先级<NIVC(2)>

原文:http://blog.csdn.net/demetered/article/details/26044693

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!