我在调试MSP430FR2033的按键时发现一个很奇怪的问题,我在Debug时可以正常进入按键中断(下降沿触发),但烧录好了之后单独上电就是无法进入中断。我debug没有设置任何断点,直接点击的运行。
int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer initGpio(); cs_init(); //uart_init(); limit_int_en(); bat_info_init(); angle_info_init(); vent_self_test(); rtc_wake_isr(); while (1) { angle_test(); } }
void limit_int_en(void) { P2IFG &= ~(BIT4 | BIT5); //clear P2IFGs P2IE |= BIT4 | BIT5; }
void vent_self_test(void) { __bis_SR_register(GIE); // General interrupt enable delay_hw_s(10); vent_info_init(); angle_en(); timer_start(); motor_init(motor_stop, 10000, 75); pwm_init(); if (!((P2IN & BIT4) == 0)) { vent_open(); while (vent.limit_open_flag == ERROR) { limit_error(); } } vent_close(); while (vent.limit_close_flag == ERROR) { limit_error(); } if (vent.limit_open_flag == ERROR) { vent_open(); while (vent.limit_open_flag == ERROR) { limit_error(); } } vent.init_flag = OK; timer_end(); Angle_correction(); angle_off(); }
// Port 2 interrupt service routine #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=PORT2_VECTOR __interrupt void Port_2(void) #elif defined(__GNUC__) void __attribute__ ((interrupt(PORT1_VECTOR))) Port_2 (void) #else #error Compiler not supported! #endif { switch (P2IFG) { case BIT0: P2IFG &= ~BIT0; break; case BIT1: P2IFG &= ~BIT1; break; case BIT2: P2IFG &= ~BIT2; break; case BIT3: P2IFG &= ~BIT3; break; case BIT4: /* P2.4 is LIMIT1 (Vent open), Falling edge*/ P2IFG &= ~BIT4; //__delay_cycles(10000); // Delay for n*(1/MCLK(8000000)=0.1s //if (!(P2IN & BIT4)) { if (motor.motor_flag == open_flag) { motor_stop_operate(); motor.stop_flag = open_limit_stop; if (vent.limit_open_flag == ERROR) { angle.value_open = read_angle_value(); vent.limit_open_flag = OK; } led_off(); green_on(); } //} break; case BIT5: /* P2.5 is LIMIT2(Vent close), Falling edge*/ P2IFG &= ~BIT5; //__delay_cycles(10000); // Delay for n*(1/MCLK(8000000)=0.1s //if (!(P2IN & BIT5)) { if (motor.motor_flag == close_flag) { motor_stop_operate(); motor.stop_flag = close_limit_stop; if (vent.limit_close_flag == ERROR) { angle.value_close = read_angle_value(); vent.limit_close_flag = OK; } led_off(); blue_on(); } //} break; case BIT6: P2IFG &= ~BIT6; break; case BIT7: P2IFG &= ~BIT7; break; default: break; } }