Forum: Mikrocontroller und Digitale Elektronik MSP430 - beide UARTs mit unterschiedlicher Baudrate


von Bloody Beginner (Gast)


Lesenswert?

Hey,

ich nutze gerade den MSP430F169 mit beiden UARTS. Die UART0 kommuniziert 
mit dem PC und die UART1 mit einer Steuereinheit. Die Baudraten sind 
unterschiedlich.
Nachfolgend mal der Initialisierungscode:
1
void init_serial(void)
2
{
3
  
4
5
  P3SEL = 0xF0;                         
6
  UCTL0 |= CHAR;                        
7
8
9
  //USART0 initialisieren
10
  //57600 bei 4Mhz
11
  //57600 * 2 bei 8 Mhz
12
  UTCTL0=0x30;//SSEL0.1,SSEL0.0
13
  URCTL0=0x00;
14
  U0BR1=0x00;
15
  U0BR0=0x45;
16
  UMCTL0=0x2A;
17
18
  ME1 |= UTXE0 + URXE0;                   
19
  UCTL0 &= ~SWRST;                        
20
  IE1 |= URXIE0;
21
  IFG1 &= ~URXIFG0;
22
23
  //USART1 initialisieren
24
  //9600 bei 4Mhz
25
  UCTL1 |= CHAR;
26
  UTCTL1=0x30;//SSEL0.1,SSEL0.0
27
  URCTL1=0x00;
28
  U1BR1=0x01;
29
  U1BR0=0xA0;
30
  UMCTL1=0x5B;
31
  
32
  ME2 |= UTXE1 + URXE1;                   // einschalten
33
  UCTL1 &= ~SWRST;                        // USART freigeben
34
  IE2 |= URXIE1;
35
  IFG2 &= ~URXIFG1;
36
}

Die Kommunikation über die UART0 klappt sauber.

Über den UART1 gehen Kommandozeichenketten zur Steuereinheit
[c]
void SendUSART1(void)
{
  char Chr;
  int counter = 0;

  //Erstes Zeichen holen
  Chr = ucArr_SendString_UA2[counter];
  counter++;
  //Überprüfen ob Stringterminierung
  while (Chr != 0)
  {
    while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
    TXBUF1 = Chr;
    Chr = ucArr_SendString_UA2[counter];
    counter++;
  }
}
[\c]

Jetzt habe ich aber die Situation, dass die Steuereinheit an der UART1 
jeden einzelnen Character in einer Zeichenkette sofort echoed. Diese 
einzelnen Character muss ich wieder einlesen. Deshalb hole ich mir in 
der ISR für die UART1 den Character.

[c]
void usart1_rx (void) __interrupt  [UART1RX_VECTOR]
{
  ucArr_ReadString_UA2[uint_ReadCharCounter_UA2] = RXBUF1;
  uint_ReadCharCounter_UA2++;
}
[\c]

Mein Problem ist jetzt, dass die ISR der UART1 die Character nicht 
sauber liest. Ich denke, dass es ein reines Timing-Problem ist.
Habt ihr eine Idee???
Danke,

greets Bloddy Beginner

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.