Part Number: MSP430FR5994
I am trying to toggle a GPIO pin of one board (power controller) which provides power to the other similar board (DUT). The DUT sets a GPIO pin when it completes a specific task. The power controller board monitors the GPIO pin and service the interrupt generated with ISR. The power pin toggles itself every 2 seconds. I am also trying to timestamp the start of GPIO toggle and start of interrupt. The problem is I am not able to do these two operation of toggling power GPIO and servicing the interrupt together.
Any help is much appreciated. Let me know if you have questions.
Here is my power controller code:
while(1){
// GPIO for power toggling
P5OUT ^= 0x01;
// Timestamp start of gpio toggle
tmp_start = TA0CCR2;
__bis_SR_register(LPM0 + GIE);
// Send data to UART
sprintf(readstr, "%x", tmp_start);
UART_TX(readstr);
UART_TX(",");
sprintf(readstr, "%x", tmp_stop);
UART_TX(readstr);
UART_TX(",");
sprintf(readstr, "%d", overflow_count);
UART_TX(readstr);
UART_TX("\n");
int_flag = 0;
// Delay to keep power GPIO high for 2 seconds
__delay_cycles(16000000);
}
}
// Port 1 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt void port1_isr_handler(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(PORT1_VECTOR))) port1_isr_handler (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(P1IV, P1IV__P1IFG7))
{
case P1IV__NONE: break; // Vector 0: No interrupt
case P1IV__P1IFG0: break; // Vector 2: P1.0 interrupt flag
case P1IV__P1IFG1: break; // Vector 4: P1.1 interrupt
case P1IV__P1IFG2: break; // Vector 6: P1.2 interrupt flag
case P1IV__P1IFG3: break; // Vector 8: P1.3 interrupt flag
case P1IV__P1IFG4:
tmp_stop = TA0CCR2;
P1OUT ^= BIT1;
overflow_count = 0;
__bic_SR_register_on_exit(LPM0 + GIE);
break; // Vector 10: P1.4 interrupt flag
case P1IV__P1IFG5: break; // Vector 12: P1.5 interrupt flag
case P1IV__P1IFG6: break; // Vector 14: P1.6 interrupt flag
case P1IV__P1IFG7: break; // Vector 16: P1.7 interrupt flag
default: break;
}
}
// Timer0_A3 CC1-4, TA Interrupt Handler
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_A1_VECTOR
__interrupt void Timer0_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A1_VECTOR))) Timer0_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch (__even_in_range(TA0IV, TAIV__TAIFG))
{
case TAIV__TACCR1: break;
case TAIV__TACCR2:
break;
case TAIV__TAIFG:
overflow_count++;
break;
default: break;
}
}