This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5510: UART does not transmit, receive interrupt does not trigger with example code

Part Number: MSP430F5510

I am using an Olimex dev board https://www.olimex.com/Products/MSP430/Starter/MSP430-5510STK/ and a Silicon Labs CP2102 bridge on a USB stick. I'm using CCS 6.2.0, RealTerm to send over the serial port, and TI MSP-FET430UIF debugging interface. The board is being powered from the debugger.

I can't get the example UART code (MSP430F55xx_uscia0_uart_01.c) to run on it. I have tried the original code and tried modifying the baud rate. The receive interrupt is never triggered. I've put a scope on the TX from the PC, so I can clearly see that it is sending data. I have connected TX from the PC to RX on the MSP430 and vice versa. I've connected the ground from the bridge to the dev board ground. The MSP430 TX just sits at 3.3V.

I don't know how to move forward in debugging this. 

Code below for reference. I changed the TX/RX pins to match the f5510.

#include <msp430.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P4SEL |= BIT4+BIT5;                       // P4.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
  __no_operation();                         // For debugger
}

// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
  switch(__even_in_range(UCA0IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA0IFG&UCTXIFG));             // USCI_A0 TX buffer ready?
    UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}

  • The MSP430-5510STK's P4.4/TXD & P4.5/RXD connects to the UEXT connector and uses UCA1, not UCA0. P3.3/P3.4 aren't even available for UCA0 access on the 48-Pin RGZ package. You need to use backchannel UART hardware (like on the eZ-FET) or the USB peripheral to communicate with your PC.

    Regards,
    Ryan
  • Wow. I spent way too much time trying to figure this out and I'm just straight using the wrong UART channel. I just swapped A0 for A1 and it all works now. Thanks!

**Attention** This is a public forum