打印

stm32最新库3.5中断函数问题

[复制链接]
4755|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
brotherwen|  楼主 | 2012-10-21 09:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
由于最近手上有一个方案用到了stm32f107,不得已,要搭建新的模板平台。
阅读了下最新的库函数文件。

其中对于 static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)函数有些疑问
{
  uint32_t reg_value;
  uint32_t PriorityGroupTmp = (PriorityGroup & 0x07);                         /* only values 0..7 are used          */

  reg_value  =  SCB->AIRCR;                                                   /* read old register configuration    */
  reg_value &= ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk);             /* clear bits to change               */
  reg_value  =  (reg_value                       |
                (0x5FA << SCB_AIRCR_VECTKEY_Pos) |
                (PriorityGroupTmp << 8));                                     /* Insert write key and priorty group */
  SCB->AIRCR =  reg_value;
}


其中 PriorityGroup 在声明中/* only values 0..7 are used */

而以前的是
/* Preemption Priority Group -------------------------------------------------*/
#define NVIC_PriorityGroup_0         ((u32)0x700) /* 0 bits for pre-emption priority
                                                     4 bits for subpriority */
#define NVIC_PriorityGroup_1         ((u32)0x600) /* 1 bits for pre-emption priority
                                                     3 bits for subpriority */
#define NVIC_PriorityGroup_2         ((u32)0x500) /* 2 bits for pre-emption priority
                                                     2 bits for subpriority */
#define NVIC_PriorityGroup_3         ((u32)0x400) /* 3 bits for pre-emption priority
                                                     1 bits for subpriority */
#define NVIC_PriorityGroup_4         ((u32)0x300) /* 4 bits for pre-emption priority
                                                     0 bits for subpriority */

void NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup)
{
  /* Check the parameters */
  assert_param(IS_NVIC_PRIORITY_GROUP(NVIC_PriorityGroup));

  /* Set the PRIGROUP[10:8] bits according to NVIC_PriorityGroup value */
  SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;
}



最后发现如果NVIC_SetPriorityGrouping函数调用的参数是0~7其两函数结果是不一样的。

其中还有NVIC_EncodePriority和NVIC_DecodePriority中的参数Priority应该怎么填才是对的。这两函数中的内容还没有去核实。希望有人能解答我上述疑问
沙发
brotherwen|  楼主 | 2012-10-21 09:23 | 只看该作者
其中还有NVIC_EncodePriority和NVIC_DecodePriority中的参数PriorityGroup应该怎么填才是对的。这两函数中的内容还没有去核实。希望有人能解答我上述疑问

使用特权

评论回复
板凳
brotherwen|  楼主 | 2012-10-21 09:33 | 只看该作者
明白了,两版本分组情况不同,新版本的PriorityGroup  0  实际就是老版本的  7

使用特权

评论回复
地板
yuxuefly| | 2013-8-19 16:48 | 只看该作者

使用特权

评论回复
5
hkcj| | 2013-8-19 18:56 | 只看该作者
不错的学习帖子   谢谢了  楼主   学习学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:千峰竞秀苍茫意,迷离乱步觅雪狐

52

主题

217

帖子

0

粉丝