MSP430 - beide UARTs mit unterschiedlicher Baudrate

Gast #531765
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren