问题描述:IO口的某些位在没有开启中断的情况,如果把DIR设置为输出,会产生中断标志IFG。
测试代码:
#pragma vector=PORT2_VECTOR
__interrupt void P2__ISR(void)
{
if ( P2IFG & BIT3 )
{
asm("NOP");
}
if ( P2IFG & BIT5 )
{
asm("NOP");
}
P2IFG = 0;
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop Watchdog Timer
BCSCTL1 = CALBC1_1MHZ; // Set DCO to 16MHz
DCOCTL = CALDCO_1MHZ;
P2DIR |= BIT0 + BIT4; //执行该语句时P2IFG会变为0x10,即P2IFG4=1;
//由于F2272IO口方向默认为输入,所以这里省掉了配置中断时的方向设置
P2IES |= BIT3 + BIT5; //下降沿触发
P2IE |= BIT3 + BIT5;
_EINT(); //开总中断
while(1)
{
}
}
P2DIR |= BIT0 + BIT4;
//执行该语句时P2IFG会变为0x10,即P2IFG4=1;
感觉问题很奇怪,虽然不影响我现在的程序,但是希望搞清楚原因。
希望大家指点一下。 |