STM32的Systick中断优先级控制
用的是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这个设置的是外设就是普通的中断的中断优先级
如果这两个都设置的话 那个的优先级别高一点啊?
RE:STM32的Systick中断优先级控制
IRQn同一级别的时候,priority决定哪个中断先运行。IRQ决定先进哪个中断。但是这个2个是同时需要处理的。
RE:STM32的Systick中断优先级控制
谢谢 虽然不是我要的答案但是让我领悟到了 可能是我表达的不清楚。应该是每一个中断号 应该都有自己的中断控制寄存器,看自己设置。我本来以为优先级控制就是一个总的中断控制器 误解了。RE:STM32的Systick中断优先级控制
我以为你问的是关于中断优先级的问题。RE:STM32的Systick中断优先级控制
真的还有个关于中断优先级的问题STM32 关总中断 是通过改变CPU的当前优先级来允许或禁止中断。就是把NMI 与HARDfault 设置为最高优先级 ,这样为什么就能把别的中断都屏蔽了呢? 优先高的运行完了 低优先级的中断不是还会响应的吗?
RE:STM32的Systick中断优先级控制
南方注重能力,北方注重关系”。RE:STM32的Systick中断优先级控制
楼上的 可以解析下吗 ?回复:STM32的Systick中断优先级控制
在 SCB->SHP 中設置的是內核的中斷,內核的中斷無論何時都會比內核外部的中斷具有優先權.lucky_jeck 发表于 2012-4-3 13:13
在 SCB->SHP 中設置的是內核的中斷,內核的中斷無論何時都會比內核外部的中斷具有優先權.
...
你回答错了 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、内核的优先级并非一定比外设的优先级高,只要你的优先级可以配置。
页:
[1]
2