打印

【外部中断】ISR不同写法得到完全不同的结果

[复制链接]
1605|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bobo5650|  楼主 | 2012-6-21 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用了外部中断来捕捉一个输入信号下降沿的次数,同一个信号源,仅仅是ISR稍有不同,得到的结果差了几乎一倍,请大侠们帮忙看看。

void IsrSig2Detect(void)
{
    mClearSig2IntFlag();
wSig2ClockCnt++;
//    GPIOB->ODR^=DEF_BIT_12;     //debug
//    asm("nop");
}
用这种写法捕获的次数是正确的。

void IsrSig2Detect(void)
{
wSig2ClockCnt++;   
mClearSig2IntFlag();
//    GPIOB->ODR^=DEF_BIT_12;     //debug
//    asm("nop");
}
用这种写法捕获的次数是正确值的2倍(其实就是调换了一下清中断标志跟累加的顺序)

void IsrSig2Detect(void)
{
wSig2ClockCnt++;   
mClearSig2IntFlag();
GPIOB->ODR^=DEF_BIT_12;     //debug
//    asm("nop");
}
用这种写法捕获的次数也是正确的(信号检测脚用的是PD7,跟PB12是不相关的,加一个异或是用来确认进入中断的次数)。

如果第3中ISR得到的结果也是错误的,我就不那么纠结了,我就会认为是中断标志清除得太晚,但是第3种偏偏得到了正确的结果。
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

279

帖子

1

粉丝