Nick
Nick

Reputation: 11

MSP430 G2553 UART Baudrate 9600 16MHz clock Issues

I'm interfacing my G2553 to a standard LCD screen using UART. I got it working like a dream at 1MHz, but need the system to run at 16MHz for certain other peripherals. I got it very close to working at 16MHz but there is what I believe to be a baudrate error, as the screen will show almost what I sent it, but miss a character here or there or get a character incorrect. I'll take you through how I wrote my code to see if I made any errors.

The screen expects a baudrate of 9600, so I went to the table in my user guide:

So UCBRx = 1666 and UCBRSx = 6.

The expected % errors on this are actually better than what I was using at the 1MHz clock so I thought this would be OK.

This means UCBR0 = 130 and UCBR1 = 6 (This is just the HEX value of UCBRx spread over two 8-bit registers) and UCBRSx = 6.

Now to enter these I looked at what the user guide tells us about the UART modulation register:

(was going to make this pretty but I don't have the reputation to post images)

So my initialisation code ended up being:

if (CALBC1_16MHZ==0xFF)                 // If calibration constant erased
{
  while(1);                               // do not load, trap CPU!!
}

DCOCTL = 0;                               // Select lowest DCOx and MODx settings

//setup DCO to 16MHZ
BCSCTL1 = CALBC1_16MHZ;
DCOCTL = CALDCO_16MHZ;

P1SEL |= BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
P1SEL2 |= BIT1 + BIT2;
UCA0CTL1 |= UCSSEL_2;                     // SMCLK
UCA0BR0 = 130;                            // 16MHz 9600
UCA0BR1 = 6;                              // 16MHz 9600
UCA0MCTL = UCBRS2 + UCBRS1;             // modulation is 110b or 6
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

However as I stated above this is almost there, for example if I try to display the string "Initialising..." which worked for my 1MHz 9600 baudrate settings, with 16MHz at these settings it might display "Initiali ng..." - something close but obviously some error in there that I don't want.

Thank you for any help you can provide on this.

Upvotes: 1

Views: 6341

Answers (1)

ekoeppen
ekoeppen

Reputation: 126

According to the baud rate calculator at http://mspgcc.sourceforge.net/baudrate.html, UCA0MCTL is supposed to be 0x5B

Upvotes: 0

Related Questions