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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.