在外部中止和中止操控器中,咱们首要论述嵌套向量中止操控器(NVIC),他和处理器核的接口紧紧相连。能够完成低延时的中止处理和处理晚到的中止。首要具有以下几个特色:
1.60个可屏蔽中止通道;
2.16个可编程的优先等级;
3.低延时的反常和中止处理;
4.电源办理操控;
5.系统操控寄存器的完成。
其间每一个STM32系列芯片都会有一个产品向量表,博友们能够在相关 产品阐明书中检查详细的中止问题。
接下来介绍中止优先级
在M3中有两个优先级的概念-抢占优先级和呼应优先级。每一个中止源都有必要指定这两种优先级。这儿的中止抢占其实和89C51差不多,高中止优先级能够抢占正在进行中止处理的低中止优先级,也便是咱们所说的中止嵌套。学习过51单片机的人这一点应该不是很难了解。假如两个中止源的优先级相同,就没有嵌套一说。不过当两个中止一起抵达时,就要依照他们的呼应优先级的凹凸来决议先处理谁。在假如他们的抢占优先级和相应优先级都相同,就要依据他们在中止向量表中的前后次序来决议先出来谁。
每一个中止源都需求指定这两种优先级,也便是说在中止装备中,有必要两种优先级多要装备。所以说需求相应的寄存器位来记载每个中止的优先级。在M3中界说了8bit位用于设置中止源的优先级,可是也具有较少中止源时运用较少的寄存器位指定中止源的优先级,所以STM32把指定中止优先级的寄存器位削减到4位。详细分组为:
第0组:一切4为用于指定呼应式优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定呼应式优先级;
第2组:最高2位用于指定抢占式优先级,最低2位用于指定呼应式优先级;
第3组:最高3位用于指定抢占式优先级,最低1位用于指定呼应式优先级;
第4组:一切4位都用于指定抢占式优先级。
咱们也能够经过调用STM32固件库中的函数NVIC_PritorityGroupConfig()来挑选运用哪一组优先级分组方法。
咱们用一个例子来阐明怎么指定中止源的抢占式优先级和呼应式优先级。
//挑选运用优先级分组1
NVIC_PritorityGroupConfig(NVIC_PritorityGroup_1);
//使能EXTI0
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreempTIonPriority = 1;//指定抢占优先级组别1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//指定呼应优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//使能ENTI9_5
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//指定抢占优先级组别1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//指定呼应优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
其间要注意以下几点:假如指定的抢占式优先等级或呼应优先等级超出了选定的优先级分组所限制的规模,会有其他的成果呈现;
抢占式优先等级相同的中端源没有嵌套联系
假如某个中止源被指定为某个抢占式优先等级,又没有其他中止源处于同一抢占式优先组别,则能够为这个中止源指定恣意有用的呼应优先等级。