The supplied example, msp430x20x3_ta_uart2400.c, works OK up to the point when there is a timer overflow condition.
As the condition is unhandled a reset occurs.
While this may not matter for just an example, it does matter when you copy, as-is, into your application as the uart driver.
At first I tried catching the overflow condition by checking the TAIV value in the TIMERA0 interrupt handler. Oddly enough I never managed to trap the overflow condition so I tried another tack.
In the TX_Byte function, TAR is zeroed. It is assumed that TX_Byte is called frequently enough to avoid overflow happening. Not an elegant solution but good enough for now.
My modified code has // DH in the comment
// Function Transmits Character from RXTXData Buffer
void TX_Byte (void)
{
BitCnt = 0xA; // Load Bit counter, 8data + ST/SP
#if 0 // DH original code
while (CCR0 != TAR) // Prevent async capture
CCR0 = TAR; // Current state of TA counter
CCR0 += Bitime; // Some time till first bit
#else // DH new code
TAR = 0;
CCR0 = Bitime;
#endif
RXTXData |= 0x100; // Add mark stop bit to RXTXData
RXTXData = RXTXData << 1; // Add space start bit
CCTL0 = CCIS0 + OUTMOD0 + CCIE; // TXD = mark = idle
while ( CCTL0 & CCIE ); // Wait for TX completion
}