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
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 | // -----------------------------------------------------------------------------
|
OK, das mit dem Prescaler musste jetzt mal gedanklich korrigieren - da steht noch n anderer Wert drin ;-) (anderer Quarz)
ich glaub ich habs jetzt verstanden! Wenn U0CRT &= SWRST; und U0CRT = 0x01; das gleiche sind :)
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;
wo ist der Unterschied zwischen U0CRT |= SWRST und UOCRT &= SWRST ?
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 ;-)
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.
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.