你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32的Systick中断优先级控制

[复制链接]
xieyuanfu 提问时间:2012-3-19 00:36 /
用的是3.0 的库  Systick中断优先级控制 的函数是
static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
{
  if(IRQn < 0) {
    SCB->SHP[((uint32_t)(IRQn) & 0xF)-4] = ((priority IP[(uint32_t)(IRQn)] = ((priority SHP 这个设置的是系统中断的中断优先级 ;NVIC->IP这个设置的是外设就是普通的中断的中断优先级
如果这两个都设置的话 那个的优先级别高一点啊?
收藏 1 评论10 发布时间:2012-3-19 00:36

举报

10个回答
废鱼 回答时间:2012-3-19 10:12:32

RE:STM32的Systick中断优先级控制

IRQn同一级别的时候,priority决定哪个中断先运行。
IRQ决定先进哪个中断。但是这个2个是同时需要处理的。
xieyuanfu 回答时间:2012-3-19 16:16:19

RE:STM32的Systick中断优先级控制

谢谢 虽然不是我要的答案  但是让我领悟到了 可能是我表达的不清楚。应该是每一个中断号 应该都有自己的中断控制寄存器,看自己设置。我本来以为优先级控制就是一个总的中断控制器 误解了。
废鱼 回答时间:2012-3-19 17:01:51

RE:STM32的Systick中断优先级控制

我以为你问的是关于中断优先级的问题。
xieyuanfu 回答时间:2012-3-19 19:17:17

RE:STM32的Systick中断优先级控制

真的还有个关于中断优先级的问题  STM32 关总中断 是通过改变CPU的当前优先级来允许或禁止中断。
就是把NMI 与HARDfault 设置为最高优先级 ,这样为什么就能把别的中断都屏蔽了呢? 优先高的运行完了 低优先级的中断不是还会响应的吗?
cjq_enjoy-15073 回答时间:2012-3-20 08:09:49

RE:STM32的Systick中断优先级控制

南方注重能力,北方注重关系”。
xieyuanfu 回答时间:2012-3-20 19:09:07

RE:STM32的Systick中断优先级控制

楼上的 可以解析下吗 ?
lucky_jeck 回答时间:2012-4-3 13:13:01

回复:STM32的Systick中断优先级控制

在 SCB->SHP 中設置的是內核的中斷,內核的中斷無論何時都會比內核外部的中斷具有優先權.
 
野火_firege 回答时间:2016-8-15 12:09:16
lucky_jeck 发表于 2012-4-3 13:13
在 SCB->SHP 中設置的是內核的中斷,內核的中斷無論何時都會比內核外部的中斷具有優先權.
  ...

你回答错了                  
野火_firege 回答时间:2016-8-15 12:09:36
1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。

2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1<<4-1 = 15,这里面的4是因为STM32 使用4个位来配置中断优先级。

3、那么问题来了,这里systick的中断优先级配置成15,应该是最低的,那跟外设来比,那是systick的优先级比外设是高还是低?  这个得看 外设 配置 中断优先级时的优先级分组。

4、如果分组为 2,那抢占优先级和子优先级各有2个位表示优先级,抢占的取值范围为0~3,子优先级的取值范围为:0~3。那这时systick的优先级15,该怎么对比,只需要把15转换成二进制:1111,这四位同样受优先级分组的控制,即前两位表示抢占优先级,那就是3,后两位表示子优先级,也是3。在分组2里面都是最低的。如果你的外设也配置成组2,主和子优先级配置的不是3,那就肯定比systick的优先级高。

5、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。
野火_firege 回答时间:2016-8-15 12:10:09
安 发表于 2012-3-19 10:12
IRQn同一级别的时候,priority决定哪个中断先运行。
IRQ决定先进哪个中断。但是这个2个是同时需要处理的。 ...

这个是当你软件优先级配置成一样的情况下,楼主的问题是内核的优先级跟外设的优先级谁高。

1、只要内核的优先级可以配置,那么内核的优先级就不是一定比外设的高,而是要先比较软件优先级,如果软件优先级一样,那么就比较他们的硬件的中断编号,编号就是在中断向量表中的位置,越小,优先级越高。

2、以systick为例,在systick的固件库初始化函数:SysTick_Config(uint32_t ticks) 中,调用了NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); ,这里面把 systick的 优先级配置为 :1<<4-1 = 15,这里面的4是因为STM32 使用4个位来配置中断优先级。

3、那么问题来了,这里systick的中断优先级配置成15,应该是最低的,那跟外设来比,那是systick的优先级比外设是高还是低?  这个得看 外设 配置 中断优先级时的优先级分组。

4、如果分组为 2,那抢占优先级和子优先级各有2个位表示优先级,抢占的取值范围为0~3,子优先级的取值范围为:0~3。那这时systick的优先级15,该怎么对比,只需要把15转换成二进制:1111,这四位同样受优先级分组的控制,即前两位表示抢占优先级,那就是3,后两位表示子优先级,也是3。在分组2里面都是最低的。如果你的外设也配置成组2,主和子优先级配置的不是3,那就肯定比systick的优先级高。

5、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版