Forum: Mikrocontroller und Digitale Elektronik [XMEGA] UART (in Master SPI mode) kann nicht neu konfiguriert/gestartet werden


von Jiri D. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

bin gerade am verzweifeln, weil ich das Verhalten ueberhaupt nicht 
verstehe:

Ich habe einen ATxmega384C3 und an diesem einen ADXL312 
Beschleunigungssensor angeschlossen. Fuer die Kommunikation verwende ich 
den USARTC0 als Master SPI, sende dem ADXL ein Befehlsbyte und empfange 
dann 3 16-bit Werte (X, Y, Z Beschleunigung).
Das Ganze kommt dann in einen Buffer und der CRC wird berechnet usw.
(s. mspi-bug.c)

Mein absolut obskures Problem ist:
Deaktiviere ich den UART, setze die gleiche Konfiguration wie vorher und 
starte ihn neu, dann geht der MOSI Pin nicht mehr?!

ok.png: Version mit "#if 0"; hier funktioniert es.
fail.png: Version mit "#if 1"; hier streikt MOSI (floatet irgendwie) und 
der ADXL sendet dann natuerlich Mist...
(Signale: 1.MOSI, 2.SCK, 3.MISO, 4./CS)

Ich bin da gerade irgendwie ratlos... schon weil die Konfiguration ja 
ueberhaupt nicht geaendert wird (der Code zwischen dem RXEN/TXEN toggle 
ist copy & paste aus meiner init() und funktioniert dort)

von ich, nicht du (Gast)


Lesenswert?

Jiri Denkdirwasaus schrieb:
>
> [...]
> Mein absolut obskures Problem ist:
> Deaktiviere ich den UART, setze die gleiche Konfiguration wie vorher und
> starte ihn neu, dann geht der MOSI Pin nicht mehr?!
>

Sag mal, warum machst du das überhaupt?
Lass doch die Konfiguration einfach bestehen...

Bist du dir überhaupt sicher dass du die gleichen Registerinhalte vorher 
und nachher hast? Bei Bitoperationen passiert es nämlich schnell dass 
man da neun Fehler macht.
Wenn du irgendeine serielle Konsole hast dann lass dir da mal die 
Registerinhalte nach der ersten Initialisierung und der zweiten 
anzeigen.
Ich wette mal du setzt irgendwo ein bit falsch oder löscht eines an 
einer stelle...

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Nach dem Umkonfigurieren (Deaktivieren) des Transceivers muss das 
Datenrichtungsregister für den TXD-Pin (hier MOSI) wieder gesetzt 
werden. Das ist beim XMEGA kein Bug, sondern ein Feature.

: Bearbeitet durch User
von Jiri D. (Gast)


Lesenswert?

@Knut Ballhause:
Danke, das hat funktioniert!

Ist das ein generelles Verhalten (bei allen Transceivern), oder nur 
bei U(S)ART in MSPI?
Steht diese Information irgendwo im Datenblatt?

@ich, nicht du:
mglw. moechte ich ja die Einstellungen zu einem spaeteren Zeitpunkt 
aendern...

von Jiri D. (Gast)


Lesenswert?

Jiri Denkdirwasaus schrieb:
> Ist das ein generelles Verhalten (bei allen Transceivern), oder nur
> bei U(S)ART in MSPI?
> Steht diese Information irgendwo im Datenblatt?
FYI: Das Datenblatt sagt im USART Abschnitt:
*21.6.2 Disabling the Transmitter*
A 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. When the transmitter is disabled, it will no longer 
override the TxDn pin, and the pin direction is set as input 
automatically by hardware, even if it was configured as output by the 
user.

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
Noch kein Account? Hier anmelden.