打印

STM32中断优先级的奇怪现象,求解答。

[复制链接]
2409|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
azurysky|  楼主 | 2012-4-16 10:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32开启里SPI输出寄存器空中断,以及TIM4的输入捕获、输出匹配中断。
SPI和TIME4的中断优先级都设置成抢占优先级为0,响应优先级为2,能正常进入两个中断。都设置成抢占优先级为0,响应优先级为3也能正常工作。
其它形式的设置都不能正常工作。感觉很奇怪!!
有人能帮忙解答一下产生这个问题的原因吗?


优先级设置如下:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
NVIC_InitStructure.NVIC_IRQChannel=SPI1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  

  NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
沙发
lut1lut| | 2012-4-16 12:21 | 只看该作者
你举一个“不正常”的设置。

另外请解释什么叫做“不能正常工作”。

使用特权

评论回复
板凳
azurysky|  楼主 | 2012-4-17 13:37 | 只看该作者
下面的配置就不能正常工作。
不正常指的是不能持续进SPI的中断,只进一次就不进了。
只是优先级设置有差别怎么会出现这么大差别呢?

优先级设置如下:
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);   
NVIC_InitStructure.NVIC_IRQChannel=SPI1_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  

  NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);

使用特权

评论回复
地板
lut1lut| | 2012-4-17 15:23 | 只看该作者
按照LZ的“正确”配置,就是TIM4和SPI1的软件优先级完全一样。那么就没有中断嵌套的发生,并且当两个中断都pending的时候,Core会先响应TIM4,因为它的硬件优先级高一点(排位在前)。

按照LZ的“不正常”配置,就是TIM4的软件优先级也高些,但同样也不会发生中断嵌套。

SPI进一次就不进了?那么你用示波器看TX引脚上确实把你第一次中断写进去的数据发送出去没有啊?如果发送出去了,此时又没有TIM4的中断就应该再进SPI中断。如果发送出去了也没有再次进,你看TIM4中断如何影响了?

你自己分析分析呀。

使用特权

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

本版积分规则

32

主题

82

帖子

2

粉丝