Hallo,
ich benutze einen MSP430F169 und habe da ein Problem mit der UART
Kommunikation. Wollte mit Hilfe von HTerm 0.8.1 ein Zeichen senden und
das mit dem MSP einlesen und auswerten. Das Problem sofern ich ein
Zeichen sende wird wird es bei HTerm wieder als Echo ausgegeben. Habe
die Schaltung nachgemessen und da war alles okay. Trennt man die TX
Leitung wird der RX_Interrupt ausgelöst aber keine Zeichen eingelesen.
Liegt das Problem bei HTerm, am Quellcode oder kann es an was anderen
liegen? Danke schonmal für die Hilfe.
Quellcode:
1 | #include <msp430.h>
|
2 |
|
3 | /*
|
4 | * main.c
|
5 | */
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | volatile unsigned int i;
|
10 | WDTCTL = WDTPW + WDTHOLD; // Stop WDT
|
11 | P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
|
12 | BCSCTL1 &= ~XT2OFF; // XT2on
|
13 | do
|
14 | {
|
15 | IFG1 &= ~OFIFG; // Clear OSCFault flag
|
16 | for (i = 0xFF; i > 0; i--); // Time for flag to set
|
17 | }
|
18 | while ((IFG1 & OFIFG)); // OSCFault flag still set?
|
19 |
|
20 | BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe)
|
21 | ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
|
22 | UCTL0 |= CHAR; // 8-bit character
|
23 | UTCTL0 |= SSEL1; // UCLK = SMCLK
|
24 | UBR00 = 0x71; // 6MHz 9600
|
25 | UBR10 = 0x02; // 6MHz 9600
|
26 | UMCTL0 = 0x00; // modulation
|
27 | UCTL0 &= ~SWRST; // Initialize USART state machine
|
28 | IE1 |= URXIE0; // Enable USART0 RX interrupt
|
29 |
|
30 | _BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
|
31 | }
|
32 |
|
33 | #pragma vector=USART0RX_VECTOR
|
34 | __interrupt void usart0_rx (void)
|
35 | {
|
36 | //while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
|
37 | char r = RXBUF0; // schreibt den charackter in die Variable r
|
38 | if (r == 't') // Wenn das zeichen == t
|
39 | {
|
40 | /*do anything*/
|
41 | }
|
42 | }
|