SparkFun Forums 

Where electronics enthusiasts find answers.

Discussions on how to get your MSP JTAG programmer up and running.
By iamhuzhe
#37512
MSP430F2013 doesn't have UART (serial comm.) directly.

I tried to follow the C sample code file: "msp430x20x3_ta_uart2400.c" (http://www-s.ti.com/sc/techzip/SLAC080.zip) to set up UART with Timer_A IRS.

Unfortunately, I had to use P1.5 as RXD and P1.6 as TXD. Following is my half success trial.

(Only listed changes made to the original code)

#define TXD 0x40 // TXD on P1.6
#define RXD 0x20 // RXD on P1.5

// 57600 baud rate, SMCLK = 16 MHz
#define Bitime_5 139
#define Bitime 278

BCSCTL1 = CALBC1_16MHZ; // set DCO 16MHz
DCOCTL = CALDCO_16MHZ;

CCTL1 = OUT; // TXD Idle as Mark
TACTL = TASSEL_2 + MC_2; // SMCLK, continuous mode
P1SEL = TXD + RXD;
P1DIR = TXD; // not sure if this is correct

_EINT();

//

void RX_Ready (void)
{
BitCnt = 0x8; // Load Bit counter
CCTL0 = CCIS_1+ SCS + OUTMOD0 + CM1 + CAP + CCIE;
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
CCR0 += Bitime;


// RX
if( CCTL0 & CAP ) // Capture mode = start bit edge
{
CCTL0 &= ~ CAP; // Switch from capture to compare mode
CCR0 += Bitime_5;
}
else
{

if (CCTL0 & SCCI) // Get bit waiting in receive latch
RXTXData |= 0x80;
RXTXData = RXTXData >> 1;
BitCnt --; // All bits RXed?
if ( BitCnt == 0)
{
CCTL0 &= ~ CCIE; // All bits RXed, disable interrupt
}
}

My RX function works after correcting the original code. My TX function doesn't, though I've added another ISR (with TAIV) for CCR1.

For a new bie, it is really not very easy to use this chip. Please help.