Hi,
I have a problem using USART in asynchronous recieve mode. I guess the
problem is very simple, but I cannot debug it anyway. Could anybody help me
to find out what's going on? Thank you in advance.
The problem:
MSP should echo a symbol. But when I send a symbol to MSP from
HyperTerminal, for example 'e' (= 65h ), the software reads the buffer
RXBUF0 and sends it back through TXBUF0. However I don't get back 65h but
D9h instead. Or if I send 6Ch I get back FBh and so on.
It is definately not the HyperTerminal which sends the wrong code, we've
checked it. And baud rates are OK too, since when I hardcode MSP to send
some definate symbol, for example the same 'e' (= 65h ), I recieve it
corectly, i.e 'e' (= 65h ).
My code actually is almost the same as the example "fet140_uart05_09600.c".
Here it is:
#include <msp430x16x.h>
#include <signal.h>
void InitPins();
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitPins(); // Pins' initialization
U0CTL = SWRST; // SWRST=1
U0CTL |= CHAR; // 8-bit character
U0TCTL |= SSEL0; // UCLK = ACLK
U0BR0 = 0x03; // 32k/9600 - 3.41
U0BR1 = 0x00; //
U0MCTL = 0x4A; // Modulation
ME1 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD
U0CTL &= ~SWRST; // Initialize USART state machine SWRST=0
IE1 |= URXIE0; // Enable USART0 RX interrupt
_EINT(); // Interrupts enabled
while (1);
}
//-------------------------------------------------------------------------------
interrupt (UART0RX_VECTOR) usart0_rx (void)
{
while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // read and transmit a symbol
}
//-------------------------------------------------------------------------------
void InitPins()
{
...
P3SEL = 0x30; //P3.4 and P3.5 used in USART0/UART mode
P3DIR = 0xDF; //P3.5/receive data in = IN
...
}