| Autor |
|
|
|
BID = 647718
RaPe Gelegenheitsposter
 
Beiträge: 56 Wohnort: Radebeul
|
|
Hallo Leute,
ich sitzte gerade hinter einem Atmega8 und lasse Daten über den UART ausgeben. Wenn es zu Problemen kommt, möchte ich die Kommnikation beim UART sofort beenden. Kein einziges BIT (nicht Byte sondern BIT) soll den UART mehr verlassen. Der UART lässt sich leider nur ausschalten, wenn die Übertragung beendet wurde, nicht eher. (siehe unten Datenblatt)
Weiß jemand einen Trick, wie ich den UART sofort zum Schweigen bekommen kann?
Es sind keine weiteren PIN frei, um die Abschaltung extern zu machen.
Datenblatt:
The disabling of the Transmitter will not become effective until ongoing and pending transmissions are completed (i.e., when the Transmit Shift Register and Transmit Buffer Register do not contain data to be transmitted).
Danke für eure Hilfe |
|
BID = 647736
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
|
Eine etwas seltsame Forderung. Ich kenne sogar Systeme, die auf ein XOFF erst reagieren, nachdem sie die 256 Bytes des DMA Puffers komplett gesendet haben.
Vermutlich reicht es hier aber, wenn du TxC setzt und dann mit /TxE abschaltest.
|
|
BID = 647786
RaPe Gelegenheitsposter
 
Beiträge: 56 Wohnort: Radebeul
|
Coole Idee!
Habe es gleich ausprobiert, aber dem UART  ist das auch egal. Er schiebt trotzdem erst den ganzen Speicher raus und deaktiviert sich erst danach.
Also?
|
BID = 647788
RaPe Gelegenheitsposter
 
Beiträge: 56 Wohnort: Radebeul
|
--- DoPo entsorgt ---
mfg Don
[ Diese Nachricht wurde geändert von: DonComi am 14 Nov 2009 16:47 ]
|
BID = 647796
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Keinen einzigen IO-Pin mehr frei?
Dann könnte man mit einer kleinen Logik (ein Gatter) den UART hardwaremäßig abschalten.
Aber wozu der Aufwand? Implementiere doch eine Fehlererkennung o.ä., um sowas softwaremäßig zu lösen. Einfach den Datenstrom abbrechen ist eher die rustikale Methode...
_________________
|
BID = 647799
Harald73 Schreibmaschine
    
Falsches Format *.gif oder *.jpg verwenden!
Beiträge: 1016
|
Hi,
(Lösungsansatz aufgrund des Datenblatts, nicht probiert):
Baudratenregister zyklisch mit einem hohen Wert für eine langsame Datenrate neu schreiben
Zitat :
|
• Bit 11:0 – UBRR11:0: USART Baud Rate Register
This is a 12-bit register which contains the USART baud rate. The UBRRH contains the four
most significant bits, and the UBRRL contains the eight least significant bits of the USART baud
rate. Ongoing transmissions by the Transmitter and Receiver will be corrupted if the baud rate is
changed. Writing UBRRL will trigger an immediate update of the baud rate prescaler.
|
Damit sollten keine Clocks mehr an die Transmitlogik geschickt werden, der Ausgang ist quasi eingefroren.
Dann:
Fehleranalyse
Daten/Fehler im EEPROMspeichern
µC per WDT neu starten
Gruß
Harald
_________________
*..da waren sie wieder, meine 3 Probleme: 1)keiner 2)versteht 3)mich
* Immer die gültigen Vorschriften beachten und sich keinesfalls auf meine Aussagen verlassen!
|
BID = 647821
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Bin ich mir nicht sicher.
Es könnte auch sein, dass die Daten ab dem Update des Registers mit höherer Frequenz ausgetaktet werden.
Ich verstehe das Problem dennoch nicht...
_________________
|
BID = 647826
perl Ehrenmitglied
       
Beiträge: 11110,1 Wohnort: Rheinbach
|
Das sehe ich auch so.
Wahrscheinlich gerät dabei lediglich das Timing des Baudrategenerators durcheinander. Corrupted heisst ja nicht aborted.
[ Diese Nachricht wurde geändert von: perl am 14 Nov 2009 18:31 ]
|