打印

请教,关于中断嵌套的问题(内有例子)!!

[复制链接]
2169|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bigflower|  楼主 | 2009-5-25 13:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的中断时使用两个,一个事外部中断PA8,另一个timer3产生10ms中断,设置如下:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//配置为:先占优先级(0-1),从优先级(0-7)

// Enable the EXTI9_5 Interrupt 
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;//先占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//从优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel;
VIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

中断服务子程序如下:
void EXTI9_5_IRQHandler(void)
{    
    if(EXTI_GetITStatus(EXTI_Line8) != RESET)
    {

    delay_1ms(2000);
          
        }
}

void TIM3_IRQHandler(void)
{
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //清中断    
    keyboard_proc();
    if(++timer0_10ms_counter>50)//50*10ms=500ms
    {
    timer0_10ms_counter=0;
    update_display();
    }
    
}

从设置上看,我的timer3的中断优先级比PA8的外部中断优先级高,应该可以中断PA8的运行。我在PA8中断的开始和结束都设置一个断点(注意PA8中断中我故意加了一个2000ms的延时),在timer3的中断入口也设置了一个断点,按照预期的效果应该是timer3中断PA8中断,可是结果是没有中断PA8的中断

请问问题在哪??
谢谢!!

沙发
bigflower|  楼主 | 2009-5-25 14:16 | 只看该作者

我使用ULINK2调试的,并且使用simulator仿真也是不能嵌套。

我使用ULINK2调试的,并且使用simulator仿真也是不能嵌套。
请使用过的人,指教一下哪有问题。

谢谢!!

使用特权

评论回复
板凳
lonely8122| | 2009-5-25 18:32 | 只看该作者

可以试试全速运行

可以试试全速运行,再两个中断里设置一些标志变量来检查是不是嵌套了,感觉有时候用仿真器单步调试或调断点时序不是很准确。

使用特权

评论回复
地板
bigflower|  楼主 | 2009-5-25 20:50 | 只看该作者

谢谢,您的回答,但是KEIL得simulator应该没有问题啊

使用特权

评论回复
5
bigflower|  楼主 | 2009-5-25 22:13 | 只看该作者

是自己的错误!!

我把NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);这句放到后面去了
所以错了。

使用特权

评论回复
6
lonely8122| | 2009-5-25 22:33 | 只看该作者

haha

使用特权

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

本版积分规则

26

主题

124

帖子

2

粉丝