野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 25497|回复: 5

STM32的systick中断优先级是15,为最低,看我分析的对吗

[复制链接]
发表于 2014-4-30 23:05:27 | 显示全部楼层 |阅读模式
1.知识点说明:
1)中断异常向量表中的优先级应该是指的中断、异常的硬件优先级,如果两个或更多的中断指定了相同的优先级,则由它们的硬件优先级来决定处理器对它们进行处理时的顺序。(源于cortex-M3技术参考手册)
2)Systick属于内核中断,“handled by system handlers”,优先级由Systemhandler priority registers (SHPRx)来设置;(摘自cortex-M3内核编程手册)
3)timer、串口等属于外设中断,“handled by ISRsInterrupt ServiceRoutines(ISRs)”优先级由Interruptpriority registers (NVIC_IPRx)来设置;(源于cortex-M3内核编程手册)
4)STM32有16个可编程的优先等级(使用了4位中断优先级),(摘自STM3210X参考手册)。此处的4位就是“STM3210x.h”中的__NVIC_PRIO_BITS,是4)
5Systemhandler 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);  /* set Priority for Cortex-M0 SystemInterrupts */
…………
}
由于__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的优先级呢。

回复

使用道具 举报

发表于 2014-5-1 00:30:38 | 显示全部楼层
参考一下这个吧:
Coertx-M4系列 中断嵌套的 说明 - 智能车资料区 - 野火初学123论坛 http://www.firebbs.cn/forum.php? ... ;tid=959&ctid=1

假设是下列情况:
  *     @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority
  *                                3 bits for subpriority
优先级15 == 主优先级为1,亚优先级为7
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-5 11:04:30 | 显示全部楼层
哦,明白了,野火V3开发板是cortex-M3内核的STM32F103VET6,而上述帖子上K60是cortex-m4内核,这两个内核中断优先级设置是一样的吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-5 11:04:47 | 显示全部楼层
周夏青 发表于 2014-5-1 00:30
参考一下这个吧:
Coertx-M4系列 中断嵌套的 说明 - 智能车资料区 - 野火初学123论坛 http://www.chuxue12 ...


哦,明白了,野火V3开发板是cortex-M3内核的STM32F103VET6,而上述帖子上K60是cortex-m4内核,这两个内核中断优先级设置是一样的吗
回复 支持 反对

使用道具 举报

发表于 2014-5-5 11:11:47 | 显示全部楼层
zsz2008610 发表于 2014-5-5 11:04
哦,明白了,野火V3开发板是cortex-M3内核的STM32F103VET6,而上述帖子上K60是cortex-m4内核,这两个内核中 ...

一样的,M3和M4都是4bit的优先级都是相同的设置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-5 11:15:41 | 显示全部楼层
山外メ雲ジ 发表于 2014-5-5 11:11
一样的,M3和M4都是16bit的优先级都是相同的设置

哦,谢谢指导!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 01:37 , Processed in 0.025379 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表