EDN China 电子设计技术互动社区>博客 >STM32博客 >STM32(Cortex-M3)中的优先级概念
个人档案
呢称:STM32     文章(72)     访问(371949)     评论(230)     投票(79)     订阅本博  RSS
介绍: 欢迎访问ST MCU的官方网站:
中文版 , 英文版
全部博文:
2010年  -   8月 5月 4月 1月
2009年  -   12月 11月 10月 9月 7月 6月 5月 4月 3月
2008年  -   12月 11月 10月 8月 7月 6月 5月 4月 3月
查看全部博文
              博客首页

STM32(Cortex-M3)中的优先级概念  [单片机] 发布时间:2008-08-06 11:35:17  
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。

具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

所有8位用于指定响应优先级
最高1位用于指定抢占式优先级,最低7位用于指定响应优先级
最高2位用于指定抢占式优先级,最低6位用于指定响应优先级
最高3位用于指定抢占式优先级,最低5位用于指定响应优先级
最高4位用于指定抢占式优先级,最低4位用于指定响应优先级
最高5位用于指定抢占式优先级,最低3位用于指定响应优先级
最高6位用于指定抢占式优先级,最低2位用于指定响应优先级
最高7位用于指定抢占式优先级,最低1位用于指定响应优先级

这就是优先级分组的概念。




Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:

第0组:所有4位用于指定响应优先级
第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级
第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级
第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级
第4组:所有4位用于指定抢占式优先级

可以通过调用STM32的固件库中的函数NVIC_PriorityGroupConfig()选择使用哪种优先级分组方式,这个函数的参数有下列5种:

NVIC_PriorityGroup_0 => 选择第0组
NVIC_PriorityGroup_1 => 选择第1组
NVIC_PriorityGroup_2 => 选择第2组
NVIC_PriorityGroup_3 => 选择第3组
NVIC_PriorityGroup_4 => 选择第4组


接下来就是指定中断源的优先级,下面以一个简单的例子说明如何指定中断源的抢占式优先级和响应优先级:

// 选择使用优先级分组第1组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_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);
 
// 使能EXTI9_5中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; // 指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);







要注意的几点是:

1)如果指定的抢占式优先级别或响应优先级别超出了选定的优先级分组所限定的范围,将可能得到意想不到的结果;

2)抢占式优先级别相同的中断源之间没有嵌套关系;

3)如果某个中断源被指定为某个抢占式优先级别,又没有其它中断源处于同一个抢占式优先级别,则可以为这个中断源指定任意有效的响应优先级别。
标签:  
有[ 1 ]名读者喜欢此文     
阅读(7885)   评论(17)   [最后更新:2008-08-06 11:35:17]
收藏  I   打印  I   推荐到我的小组  I   转发到我的博客 (0)
对不起,您还没有登录,请先登录注册


有 [ 16 ] 名读者发表评论 - STM32(Cortex-M3)中的优先级概念

网友:

中国的游客 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2012-05-13 12:02
评论: 很感谢
臭鸡蛋 (0) 鲜花 (0)

网友:

小小的菜鸟 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2012-04-16 17:44
评论: 我想问一下,是不是数字越大优先级就越高啊?
臭鸡蛋 (0) 鲜花 (0)

网友:

water_side 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2010-09-24 09:44
评论: 很好!很强大!
臭鸡蛋 (0) 鲜花 (0)

网友:

angguohui 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2010-07-27 14:01
评论: 顶了
臭鸡蛋 (0) 鲜花 (0)

网友:

zhengwei2008 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-11-10 14:45
评论: 明白了!谢谢。
臭鸡蛋 (0) 鲜花 (0)

网友:

unsv 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-05-27 09:19
评论: 写的很好很强大!!!不过有个疑问!! 响应优先级应该至少占一位吧 那么您为什么说“第4组:所有4位用于指定抢占式优先级 ”呢?
臭鸡蛋 (0) 鲜花 (0)

网友:

bigflower 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-05-25 13:23
评论: 请问,您上面的例子中EXTI0优先级比EXTI9_5低? 另外EXTI9_5可以中断EXTI0吗?? 谢谢!!
臭鸡蛋 (0) 鲜花 (0)

网友:

wjyfqq 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-04-22 14:19
评论: 很好! 看了清楚些,
臭鸡蛋 (0) 鲜花 (0)

网友:

liupster 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-03-08 21:45
评论: 谢谢了 整个系统只能选择同一组分组方式 主要是为了弄清楚这个
臭鸡蛋 (0) 鲜花 (0)

网友:

sunhy 快速回复
对不起,您还没有登录,请先登录注册
引用回复 (0)
对不起,您还没有登录,请先登录注册
2009-01-09 15:53
评论: 讲得好明白,使我少走很多弯路,谢谢~
臭鸡蛋 (0) 鲜花 (0)
我来评论 - STM32(Cortex-M3)中的优先级概念
您的昵称: 美国的游客        (您将以游客身份发表,请登录 |  注册)
您的评论:
 
你还可以输入1000
验证码:
   
转发到我的博客
评论 @STM32 Releasing Your Creativity 的“STM32(Cortex-M3)中的优先级概念”
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一
你还可以输入20000
同时评论给 STM32
    
快速回复
 
你还可以输入1000
    
引用回复
引用评论 
 
你还可以输入1000
    
最新评论
热门标签

EDN官方QQ群   更多QQ群
  • EDN-深圳 8366025
  •  NEW!
  • 菜农Cortex-M0技术交流 12047788
  • EDN-哈尔滨 75642591
  • EDN-上海 15156661
  • EDN-广州 57660943
  • EDN-桂林 48813559
  • EDN-武汉 25150805
  • EDN-模拟电路 2837145
  • EDN-通讯 30548292
  • EDN-综合 57490949

促进EDN网友交流合作,方便EDN网友学习沟通

2012 EDN China -- Use of this website is subject to its terms of use.
经营许可编号:京公安备110102000546 京ICP备09028740号-20