按键设置不解:这是MSP430F5529USB 板按键原理图
按键程序如下
void Buttons_init(uint16_t buttonsMask)
{
BUTTON_PORT_OUT |= buttonsMask; //buttons are active low
BUTTON_PORT_REN |= buttonsMask; //pullup resistor
BUTTON_PORT_SEL &= ~buttonsMask;
}
void Buttons_interruptEnable(uint16_t buttonsMask)
{
BUTTON_PORT_IES &= ~buttonsMask; //select falling edge trigger
BUTTON_PORT_IFG &= ~buttonsMask; //clear flags
BUTTON_PORT_IE |= buttonsMask; //enable interrupts
}
BUTTON_PORT_IES &= ~buttonsMask; 这个是上升沿中断
为什么不是 BUTTON_PORT_IES |= buttonsMask;
我改成BUTTON_PORT_IES |= buttonsMask; 也是可以。
还有就是没有清除中断标志
#pragma vector=PORT2_VECTOR
__interrupt void Port2_ISR(void)
{
//
// Context save interrupt flag before calling interrupt vector.
// Reading interrupt vector generator will automatically clear IFG flag
//
buttonsPressed = PAIFG & BUTTON_ALL;
__interrupt void Port2_ISR(void)
{
//
// Context save interrupt flag before calling interrupt vector.
// Reading interrupt vector generator will automatically clear IFG flag
//
buttonsPressed = PAIFG & BUTTON_ALL;
switch (__even_in_range(P2IV, P2IV_P2IFG7))
{
// Vector P2IV_NONE: No Interrupt pending
case P2IV_NONE:
break;
{
// Vector P2IV_NONE: No Interrupt pending
case P2IV_NONE:
break;
// Vector P2IV_P2IFG0: P2IV P2IFG.0
case P2IV_P2IFG0:
break;
case P2IV_P2IFG0:
break;
// Vector P2IV_P2IFG1: P2IV P2IFG.1
case P2IV_P2IFG1:
break;
case P2IV_P2IFG1:
break;
// Vector P2IV_P2IFG2: P2IV P2IFG.2
case P2IV_P2IFG2:
if (buttonDebounce == 1)
{
buttonDebounce = 2;
Buttons_startWDT();
__bic_SR_register_on_exit(LPM3_bits);
}
else if (buttonDebounce == 0)
{
__bic_SR_register_on_exit(LPM4_bits);
}
//P2IFG=0;
break;
case P2IV_P2IFG2:
if (buttonDebounce == 1)
{
buttonDebounce = 2;
Buttons_startWDT();
__bic_SR_register_on_exit(LPM3_bits);
}
else if (buttonDebounce == 0)
{
__bic_SR_register_on_exit(LPM4_bits);
}
//P2IFG=0;
break;
// Vector P2IV_P2IFG3: P2IV P2IFG.3
case P2IV_P2IFG3:
break;
case P2IV_P2IFG3:
break;
// Vector P2IV_P2IFG4: P2IV P2IFG.4
case P2IV_P2IFG4:
break;
case P2IV_P2IFG4:
break;
// Vector P2IV_P2IFG5: P2IV P2IFG.5
case P2IV_P2IFG5:
break;
case P2IV_P2IFG5:
break;
// Vector P2IV_P2IFG1: P2IV P2IFG.6
case P2IV_P2IFG6:
break;
case P2IV_P2IFG6:
break;
// Vector P2IV_P2IFG7: P2IV P2IFG.7
case P2IV_P2IFG7:
break;
case P2IV_P2IFG7:
break;
// Default case
default:
break;
}
}
default:
break;
}
}
// Reading interrupt vector generator will automatically clear IFG flag//这句注释是读取自动清除中断标志码吗
不是要手动清除吗