我使用了外部中断来捕捉一个输入信号下降沿的次数,同一个信号源,仅仅是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种偏偏得到了正确的结果。 |