www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 UART Schnittstelle initialisieren


Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo! Ich bin neu auf dem Gebiet der µC. Ich möchte erstmal einfach nur 
errechnete Werte mit dem UART ausgegen.

Ich habe allerdings ein Verständnisproblem, wie man den UART-Port 
initialisiert und ihn dazu bewegt etwas auszugeben.

Im USER-Guide steht:

Note: Initializing or Reconfiguring the USART Module
The required USART initialization/reconfiguration process is:
1) Set SWRST (BIS.B #SWRST,&UxCTL)
2) Initialize all USART registers with SWRST = 1 (including UxCTL)
3) Enable USART module via the MEx SFRs (URXEx and/or UTXEx)
4) Clear SWRST via software (BIC.B #SWRST,&UxCTL)
5) Enable interrupts (optional) via the IEx SFRs (URXIEx and/or UTXIEx)
Failure to follow this process may result in unpredictable USART 
behavior.

Ich möchte mein Programm in C schreiben, aber ich habe überhaupt keine 
Ahnung wie nun der entsprechende C-Code dazu aussehen muss. Ich hab 
schon ein paar Codebeispiele gefunden, aber ich möchte genau verstehen, 
wie es funktioniert.

Wie soll das denn aussehen Set SWRST ? Ich verstehe die Schritte einfach 
nicht und wie man da was setzt.

Ich habe die Suche benutzt, aber es fehlt mir die Erläuterung zu den 
Codeschnipseln. Ich will nicht einfach nur kopieren und nichts 
verstehen, dann steh in Zukunft wieder dumm da, wenn ich mal was ändern 
will, oder nen anderen Port nehmen möchte.

Bin für jede Hilfe dankbar!
Grüße Fridolin

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil ich gerade zufällig ähnliches offen habe:
// ##################################################################### USCI A1
void configure_usci_a1 (void)
{
  // Configuration of USCI A1
  // HART Modem HT2015
  // UART-mode
  
  // USCI A1 CONTROL REGISTER 1
  // --------------------------
  // UCSWRST  : Hold USCI in reset state
  // UCSSEL_2 : Clock source is SMCLK
  // UCRXEIE  : Erroneous received character causes interrupt
  UCA1CTL1 |= UCSWRST;
  UCA1CTL1 |= (UCSSEL_2 | UCRXEIE);
  
  // USCI A1 CONTROL REGISTER 0
  // --------------------------
  // UCPEN    : Parity enable
  UCA1CTL0 = UCPEN;
  
  // USCI A1 BIT RATE CONTROL REGISTER
  // ---------------------------------
  // UCA1BR0  : Low-Byte of prescaler
  // UCA1BR1  : High-Byte of prescaler
  UCA1BR0 = 0;  // 12*256 = 3072 (Prescaler) -> 3686400 / 3072 = 1200 (Baud)
  UCA1BR1 = 6;
  
  UCA1CTL1 &= ~UCSWRST;      // Release USCIA1 from software-reset -> now active
  
  HART_CLEAR_RX_IFG;
  
  HART_RX_INT_ENABLE;
}
// -----------------------------------------------------------------------------

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, das mit dem Prescaler musste jetzt mal gedanklich korrigieren - da 
steht noch n anderer Wert drin ;-) (anderer Quarz)

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich glaub ich habs jetzt verstanden!

Wenn

U0CRT &= SWRST;

und

U0CRT = 0x01;

das gleiche sind :)

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fridolin schrieb:
> ich glaub ich habs jetzt verstanden!
>
> Wenn
>
> U0CRT &= SWRST;
>
> und
>
> U0CRT = 0x01;
>
> das gleiche sind :)

Keine Ahnung...kenne die Positionen der einzelnen Bits im Register nicht 
auswendig. Du solltest aber grundsätzlich nicht mit 0x01 o.ä. arbeiten, 
sondern die im Datenblatt angegeben Kürzel (#defines) verwenden - dann 
verstehst du es besser und andere können dir ggf. helfen.

Aber nur mal nebenbei:

> U0CRT &= SWRST;
Wenn du ein einzelnes Bit setzen willst, dann mit: U0CRT |= SWRST;
Zum Löschen: U0CRT &= ~SWRST;

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wo ist der Unterschied zwischen U0CRT |= SWRST und UOCRT &= SWRST ?

Autor: Dennis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fridolin schrieb:
> U0CRT = 0x01;

Hiermit weist du ein ganzes Byte zu [0000 0001]

Ist OK, aber nur wenn du das auch wirklich wolltest - es beeinflusst 
nicht nur das erste Bit.

Um erstmal nur den Reset zu setzen ist es aber in Ordnung - nur falls 
andere Bits per default '1' waren, sind sie dann jetzt '0' - AUFPASSEN 
;-)

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das war so geplant :)

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fridolin schrieb:
> wo ist der Unterschied zwischen U0CRT |= SWRST und UOCRT &= SWRST ?

Mit

    U0CRT |= SWRST

setzt Du das Bit SWRST, ohne die anderen in U0CRT zu verändern.

Mit

    U0CRT &= SWRST

setzt Du das Bit SWRST nur, wenn es vorher auch gesetzt war, alle 
anderen Bits in U0CRT werden gelöscht.

Autor: Fridolin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok alles klar vielen Dank!

Autor: codehamster (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und falls du die Register für die Baudrate nicht von Hand rechnen 
willst, hier ein Onlinerechner:

http://mspgcc.sourceforge.net/baudrate.html

Vorsicht Frequenz des Clocks in Hz eingeben!

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.