STM32 NVIC

这个概念查了半天也没弄清楚,后来看正点原子资料里的一篇文章弄明白了。现将理解的加以纪录,以备忘。

 

首先说一下优先级分组  这个概念应该是直译的英文。这个词本身就不对。准确的说是组织形式。分组给人感觉同时有好多人,分成好多组,大家选一组。。实质上分组的形式。也就是怎么分,分的方式,所以你只能选一种,这并非让我们选一个分组,而是选一个分组的方法。

以嵌入式而言,这个选的过程,肯定就是一个对寄存器赋值的过程。

 

首先,给出CORTEX-M3权威指南里的一个图,这个图原汁原味!

这个图的意思是如果

赋值为0   则8位里面第0位是亚优先级 1~7位是抢占优先级   128级抢断式优先级  每个抢断优先级里2个平等优先级   以下类推

0           [7:1] [0:0]==>  128   2

1           [7:2] [1:0]==>   64    4

2           [7:3] [2:0]==>    32   8

3           [7:4] [3:0]==>    16   16

4           [7:5] [4:0]==>      8   32

5           [7:6] [5:0]==>      4   64

6           [7:7] [6:0]==>      2   128

7           [     ] [7:0]==>      1   256

 

根本不存在分组,只是要我们选哪种分组模式而已,这个词很容易让人产生误会!!!

从图里可以看出 至少有一个亚优先级,也即平等优先级,也即平等优先级至少占1位

 

上面是CORTEX-M3自己规定的东西,但是STM32说了,它搞不定这么复杂的东西,它说它只用4位表示优先级,不用8位

按道理说,它应该设计成如下左边这样, 实际设计成了右边这样

                                                                                       4           [3:0] [     ]==>    16     1

0           [3:1] [0:0]==>      8   2                                        3           [3:1] [0:0]==>      8     2

1           [3:2] [1:0]==>      4   4                                        2           [3:2] [1:0]==>      4     4

2           [3:3] [2:0]==>      2   8                                        1           [3:3] [2:0]==>      2     8

3           [     ] [3:0]==>      1   16                                      0           [     ] [3:0]==>      1     16

它打破了至少有1位平等优先级的约定,实际上这样才好,这是很可取的一点。

STM32设计成这样,它们有解释权,CORTEX-M3规定7号分组方式无抢断优先级位  6号分组方式1个抢断优先级位。

STM解释为0号分组方式无抢断优先级位 1号分组方式1个抢断优先级位。

 

我们再看实际情况,CORTEX-M3里面7号分组方式的时候3位全1。

对应的STM32 0号分组方式时3位全1。这中间就差了一个取反。

所以正点原子有如下代码

 1 void MY_NVIC_PriorityGroupConfig( u8 NVIC_Group )
 2 {
 3     u32 temp, temp1;
 4     temp1 = ( ~NVIC_Group ) & 0x07; //取后三位
 5     temp1 <<= 8;
 6     temp = SCB->AIRCR; //读取先前的设置
 7     temp &= 0X0000F8FF; //清空先前分组
 8     temp |= 0X05FA0000; //写入钥匙
 9     temp |= temp1;
10     SCB->AIRCR = temp; //设置分组
11 }

中间这个取反,向上STM32自圆其说,向下暗合CORTEX-M3规范。这应该也是STM32库函数里的东西,具体没看过,不作评论。

 

这篇文章仅为个人备忘,至少能解释的通。但错误难免。

 

posted on 2015-08-26 02:07  郁郁思扬  阅读(272)  评论(0编辑  收藏  举报

导航