mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART am MSP430 bekommt kein tx-ready flag


Autor: derGastlie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende den Beispielcode von ti (msp430x24x_uscia0_uart_01_115k.c) 
um meine UART am MSP zu testen. Beim debugen sehe ich jedoch, dass er 
die ganze Zeit in der while-Schleife hängen bleibt und somit wartet bis 
der tx-buffer ready ist. Ich habe mir das Datenblatt durchgeschaut, 
jedoch wüsste ich nicht was ich nun noch ändern sollte, damit er endlich 
sein ready-flag erhält. Ich hoffe mir kann hier jemand weiterhelfen.

{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                     
  {  
    while(1);                               // If calibration constants erased
                                            // do not load, trap CPU!!
  }   
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 8;                              // 1MHz 115200
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled

  
while(1)
{
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    UCA0TXBUF = zeichen++;                         // TX -> RXed character
}

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Entwicklungsumgebung benutzt du?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du schickst den µC in den LPM0 und erwartest ernsthaft, dass dieser sich 
selbst wieder aufweckt, um die while-Schleife zu bearbeiten ???

Autor: derGastlie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ noips:
Ich nutze den "Code Composer Essentieals"

@ Stefan:
Sorry, stimmt. Hatte den Code einfach vom Beispiel hier rein kopiert. 
Den Teil mit "LPM0_bits +" habe ich in meinem Code raus gelöscht.

Zur korrekten Angabe hier noch mal der richtige Code (bei dem ich im 
debug-Modus in der "while (!(IFG2&UCA0TXIFG));"-Schleife hängen bleibe):
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                     
  {  
    while(1);                               // If calibration constants erased
                                            // do not load, trap CPU!!
  }   
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 8;                              // 1MHz 115200
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  __bis_SR_register(GIE);       // Enter LPM0, interrupts enabled

  
while(1)
{
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
    UCA0TXBUF = zeichen++;                         // TX -> RXed character
}

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo ist denn dein RX-IR-Handler? Der ist aber schon auch noch irgendwo 
vorhanden, oder?

Autor: Mathias H. (mathias_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgendes funktioniert bei mir:

P3SEL |= 0x30 ; // P3 . 4 , 5 = USCI A0 TXD/RXD
UCA0CTL1 = UCSSEL_2 ;
 UCA0BR0 = 0x1A ; //9600@1Mhz
 UCA0BR1 = 0x00 ;
 UCA0MCTL = UCBRS_2 ;    
UCA0CTL1 &= ~UCSWRST;   


sieht so aus, als ob die Modulation fehlerhaft ist! (die andern Zeilen 
sind auch gleich!)

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.