初级会员

- 积分
- 62
- 金钱
- 62
- 注册时间
- 2013-12-16
- 在线时间
- 6 小时
|

楼主 |
发表于 2014-4-5 22:12:46
|
显示全部楼层
回复【4楼】正点原子:
--------------------------------
站长 你觉得我这样分析对不对啊?
我在STM32F103x的编程手册上看到这个寄存器 SCB_AIRCR (P119),很明显这是一个32bit的寄存器,他的【10:9】是PRIGROUP ,在下面的解释说道通过这三位配置可以决定  RI_N【7:4】中的主优先级和辅助优先级。
显然,我查阅到System handler priority registers:SCB_SHPRx(一共有SHPR1-SHPR3四个寄存器组),看到编程手册P122页,Table 39.我们可以知道就是这个寄存器来配置系统内部异常的优先级的!其中PRI_15就是SysTick异常!
这时候,我想到了我们平时配置定时器中断不也要分组么?麽非这两个有联系? 于是我打开一个库函数版本的列程,看到这个函数”NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置NVIC中断分组2:2位抢占优先级,2位响应优先级“,我果然在里面找到了这句代码 “SCB->AIRCR = AIRCR_VECTKEY_MASK | NVIC_PriorityGroup;”,这说明,我们的普通外部中断优先级和系统内部异常优先级是没有区别的!都是在同一个分组下面;
现在假设我们设定分组为第二组,就是2bit 主优先级和2bit响应优先级,那么在默认情况下PRI_15复位值是0 ,那么优先级bit就是00 00,也就说SysTick异常的优先级默认是最高的!不过我看到好多都是在滴答初始化里面有NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);
也就是讲PRI_15设置成 1111,也就是优先级最低的!
站长,你看我分析的有问题么? |
|