mikrocontroller.net

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


Autor: Bloody Beginner (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
void init_serial(void)
{
  

  P3SEL = 0xF0;                         
  UCTL0 |= CHAR;                        


  //USART0 initialisieren
  //57600 bei 4Mhz
  //57600 * 2 bei 8 Mhz
  UTCTL0=0x30;//SSEL0.1,SSEL0.0
  URCTL0=0x00;
  U0BR1=0x00;
  U0BR0=0x45;
  UMCTL0=0x2A;

  ME1 |= UTXE0 + URXE0;                   
  UCTL0 &= ~SWRST;                        
  IE1 |= URXIE0;
  IFG1 &= ~URXIFG0;

  //USART1 initialisieren
  //9600 bei 4Mhz
  UCTL1 |= CHAR;
  UTCTL1=0x30;//SSEL0.1,SSEL0.0
  URCTL1=0x00;
  U1BR1=0x01;
  U1BR0=0xA0;
  UMCTL1=0x5B;
  
  ME2 |= UTXE1 + URXE1;                   // einschalten
  UCTL1 &= ~SWRST;                        // USART freigeben
  IE2 |= URXIE1;
  IFG2 &= ~URXIFG1;
}

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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.