本帖最后由 javine 于 2014-6-26 11:20 编辑
我的项目中使用了3个中断,需要设置中断优先级。
调低TIM4和ADC1中断优先级之后,遇到看门狗一直复位的问题。
对其进行一番分析和验证之后,该问题可以简化为下面的过程。
1.打开TIM4定时器和TIM4中断。并讲TIM4中断的中断优先级设置为2(默认为最高优先级--- 3)
2.打开看门狗,在主循环中只有喂狗程序3.SWIM在线调试,系统不断复位。
4.检查发现,有一个默认保留的 中断服务向量struct interrupt_vector const _vectab[] = {
{0x82, (interrupt_handler_t)_stext}, /* Reset */
{0x82, (interrupt_handler_t)TRAP_IRQHandler}, /* TRAP - Software interrupt */
{0x82, (interrupt_handler_t)NonHandledInterrupt}, /* Reserved */
{0x82, (interrupt_handler_t)FLASH_IRQHandler}, /* irq1 - FLASH interrupt */
{0x82, (interrupt_handler_t)DMA1_CHANNEL0_1_IRQHandler}, /* irq2 - DMA1 channel0 and channel1 interrupt */
系统默认中断优先级为3(最高),TIM4中断发生之后没有进入TIM4的中断服务程序,而是在不停进入了IRQ0的中断服务程序[url=home.php?mod=space&uid=422518]@interrupt[/url] void NonHandledInterrupt(void)
{
return;
}
导致看门狗在主循环中不能成功喂狗,系统复位。
请问有用过这款单片机的高手们,它的中断优先级不是等于没用吗?
是单片机本来就这样,还是可能是我哪里设置有问题? |