SMT32 systick中断优先级分析

来源:本站
导读:目前正在解读《SMT32 systick中断优先级分析》的相关信息,《SMT32 systick中断优先级分析》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《SMT32 systick中断优先级分析》的详细说明。
简介:中断异常向量表中的优先级应该是指的中断、异常的硬件优先级,如果两个或更多的中断指定了相同的优先级,则由它们的硬件优先级来决定处理器对它们进行处理时的顺序。

1.知识点说明:

1)Systick属于内核中断,“handled by system handlers”,优先级由Systemhandler priority registers (SHPRx)来设置;(摘自cortex-M3内核编程手册)

2)timer、串口等属于外设中断,“handled by ISRs(Interrupt ServiceRoutines(ISRs))”优先级由Interruptpriority registers (NVIC_IPRx)来设置;(源于cortex-M3内核编程手册)

3)STM32有16个可编程的优先等级(使用了4位中断优先级),(摘自STM3210X参考手册)。此处的4位就是“STM3210x.h”中的__NVIC_PRIO_BITS,是4);

4)Systemhandler priority registers (SHPRx)说明:The SHPR1-SHPR3 registers set the priority level, 0 to 15 of the exceptionhandlers that have configurable priority.即代表内核中断优先级可以在这16个优先等级中选择,那么就和外设中断一样,可以统一设定优先等级。(摘自cortex-M3内核编程手册)

2.分析:

有了以上知识点下面来分析systick的初始化,程序中对其优先级进行重新设定。

systick配置函数中包含中断优先级的设置,如下:

static __INLINE uint32_tSysTick_Config(uint32_t ticks)

{

…………

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);

…………

}

由于__NVIC_PRIO_BITS定义为4,上式中(1<<__NVIC_PRIO_BITS)- 1)=15,所以systick的中断优先级是最低的。

3.问题:

在对外设中断优先级设定时用此函数: NVIC_Init(&NVIC_InitStructure);

如果外设设置了主次优先级,以下三种情况中任一个:

* @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority

* 3 bits for subpriority

* @arg NVIC_PriorityGroup_2: 2 bits for pre-emption priority

* 2 bits for subpriority

* @arg NVIC_PriorityGroup_3: 3 bits for pre-emption priority

* 1 bits for subpriority

那么优先级就没有15这一级了,该如何理解systick的优先级呢。

答案是:

不管 PriorityGroup是多少,4bit 就意味着 priority 的范围从 0~15

高 PriorityGroup 位就是抢占优先级,低 4 - PriorityGroup位就是亚优先级

假设是下列情况:

* @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority

* 3 bits for subpriority

优先级15 == 主优先级为1,亚优先级为7

提醒:《SMT32 systick中断优先级分析》最后刷新时间 2024-03-14 01:09:43,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《SMT32 systick中断优先级分析》该内容的真实性请自行鉴别。