Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP5529 中断案件处理,官方程序不解

$
0
0

按键设置不解: 这是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;
    switch (__even_in_range(P2IV, P2IV_P2IFG7))
    {
        // Vector  P2IV_NONE:  No Interrupt pending
        case  P2IV_NONE:
            break;
        // Vector  P2IV_P2IFG0:  P2IV P2IFG.0
        case  P2IV_P2IFG0:
            break;
        // Vector  P2IV_P2IFG1:  P2IV P2IFG.1
        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;
        // Vector  P2IV_P2IFG3:  P2IV P2IFG.3
        case  P2IV_P2IFG3:
            break;
        // Vector  P2IV_P2IFG4:  P2IV P2IFG.4
        case  P2IV_P2IFG4:
            break;
        // Vector  P2IV_P2IFG5:  P2IV P2IFG.5
        case  P2IV_P2IFG5:
            break;
        // Vector  P2IV_P2IFG1:  P2IV P2IFG.6
        case  P2IV_P2IFG6:
            break;
        // Vector  P2IV_P2IFG7:  P2IV P2IFG.7
        case  P2IV_P2IFG7:
            break;
        // Default case
        default:
            break;
    }
}

// Reading interrupt vector generator will automatically clear IFG flag//这句注释是读取自动清除中断标志码吗

不是要手动清除吗


Viewing all articles
Browse latest Browse all 3634

Trending Articles