MSP430 UART Schnittstelle initialisieren

Gast #1956635
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
Gast #1956642
Lesenswert?

Weil ich gerade zufällig ähnliches offen habe:
1
// ##################################################################### USCI A1
2
void configure_usci_a1 (void)
3
{
4
  // Configuration of USCI A1
5
  // HART Modem HT2015
6
  // UART-mode
7
  
8
  // USCI A1 CONTROL REGISTER 1
9
  // --------------------------
10
  // UCSWRST  : Hold USCI in reset state
11
  // UCSSEL_2 : Clock source is SMCLK
12
  // UCRXEIE  : Erroneous received character causes interrupt
13
  UCA1CTL1 |= UCSWRST;
14
  UCA1CTL1 |= (UCSSEL_2 | UCRXEIE);
15
  
16
  // USCI A1 CONTROL REGISTER 0
17
  // --------------------------
18
  // UCPEN    : Parity enable
19
  UCA1CTL0 = UCPEN;
20
  
21
  // USCI A1 BIT RATE CONTROL REGISTER
22
  // ---------------------------------
23
  // UCA1BR0  : Low-Byte of prescaler
24
  // UCA1BR1  : High-Byte of prescaler
25
  UCA1BR0 = 0;  // 12*256 = 3072 (Prescaler) -> 3686400 / 3072 = 1200 (Baud)
26
  UCA1BR1 = 6;
27
  
28
  UCA1CTL1 &= ~UCSWRST;      // Release USCIA1 from software-reset -> now active
29
  
30
  HART_CLEAR_RX_IFG;
31
  
32
  HART_RX_INT_ENABLE;
33
}
34
// -----------------------------------------------------------------------------
Gast #1956720
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;
Gast #1956723
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 
;-)

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