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)
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...
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
@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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.