-
-
Hi damaltor,
danke für Deine prompte Antwort!
Allerdings redet (fast) jeder von was anderem; Gott-sei-Dank habe _ich's_jetzt_ kapiert!!
Manchmal ist halt so'ne Leitung ziemlich lang!!
1. Das, was ich gepostet habe, bezieht sich ALLGEMEIN auf "|=", "=" und "&= ~", also auf ganz normale Variable!
2. Das was Du und wahrscheinlich auch mic weiter oben meintet, geht in Richtung "IRQ-Flags"! (Denn nur die kann man mit 'ner Eins zurücksetzen! Allerdings ist bei uns hier von ISR sowohl beim Senden, als auch beim Empfangen (noch!?) keine Anwendung da, oder? Folglich dient die Abfrage nur beim Pollen der Antwort auf "ist TX fertig? ja oder nein". Es ist meiner Meinung nach völlig wurscht, ob wir das Flag am Anfang oder am Ende der Funktion "Senden" löschen; und zwar so wie DU richtig geschrieben hast: durch Schreiben einer Eins z.Bsp. mit "="! *)
Wenn wir den Sender wieder ausschalten wollen, dann ist empfehlenswert (übrigens so, wie von mir vorgeschlagen! !
) TXC am Anfang sicherheitshalber zu löschen und am Ende nachgucken, ob TXC gesetzt ist und dann erst den Sender aus-/abschalten!
*) Allerdings NUR im Falle, wenn mindestens ein Bit in UCSRA der Nummer 1 und/oder #0 (=U2X, MPCM) gesetzt wäre, ist Dein Vorschlag mit "=" falsch, denn dann setzt Du diese Bits AUCH auf Null!
So jetzt zum Fall UCSRA (= USART Control and Status Register A):
Auf Seite 154 steht, dass nur das Flag TXC (=USART Transmit Complete, Bit #6) von den anwesenden IRQ-Flags les- UND schreibbar ist! (D.h., dass man die anderen {IRQ-}Bits #7, 5 - 2!) durch Schreiben NICHT verändern kann!
==>> Dem zur Folge ist HIER "UCSRA |= 0x40;" bzw. "UCSRA |= (1<<TXC);" AUCH richtig!!
Ob der Maschinenbefehl "CBI" hier geht, weiß ich nicht, da ich bisher noch nicht herausgebracht habe, an welcher Position im IO-Bereich sich "UCSRA" befindet, da wie Du ja richtig geschrieben hast, das nur in der unteren Hälfte geht!
So jetzt zur Initialisierung von TX:
Auf Seite 139 ist ÜBERHAUPT KEINE Rede von TXC! (Also weder 'ne Null noch 'ne Eins werden da "offiziell als Bsp." gesetzt! Allerdings steht auf Seite 154, dass man - m.M. nach! - TXC trotzdem _sicherheitshalber_ clearen kann! (Was wir ja machen und was jetzt _neu_ _zum_Ausschalten_ wirklich nötig ist! Früher musste/brauchte man da auf TXC nicht warten! Wenn man's trotzdem gemacht hat, war es sicher nicht FALSCH, jedoch UNNÖTIG!)
... nun zu Deinem Statement von CBI:
Lt. schlauer Beschreibung "Instruction Set" steht auf Seite 48: "Clears an specified bit in an IO Register. ..." Das mit "geODERt" gilt hier nicht!
Du / Ihr habt das möglicherweise mit CBR verbuxelt! Denn da wird - allerdings nur in einem Rd-Register, also noch weiter vorne in dem Speicher als bei IO-Regs! - mit dem Kehrwert "geUNDet"!
So, jetzt habe ich (und hoffentlich auch alle anderen Leser!) wieder 'mal was gelernt!
cu Helmut
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen