Hi Habe ein Problem mit dem SPI-Interface von einem STM32f4. Wenn ich das Data-Register (DR) auslese wird ein falscher Wert in der Variable gespeichert. Dass im DR ein andere Wert steht sieht man im Peripheral-Viewer und auch die Messung mit einem Oszi zeigt diesen anderen Wert. Anbei der Screenshot an dem man dies alles erkennen kann. Die SPI-Control Register sind auch zu sehen. Was ist hier los?
Register wie DR lesen zerstörend, d.h. mit dem Lesevorgang verschwindet der alte Wert aus DR und es erscheint u.U. ein neuer aus einem Puffer oder Schieberegister. Hier könnte es bedeuten, dass der nächste Wert 0x07 ist und du das Resultat des Transfer des ersten spi_put(0x00) erhältst, aber das Resultat des zweiten spi_put(0x00) erwartet hattest. Daumenregel bei SPI ist, dass zu jedem put auch ein get gehört, ob man den Inhalt braucht oder nicht. Dazu kommt, dass solche Register doppelt existieren, pro Richtung eines, mt völlig unterschiedlichem Inhalt. Ein Debugger wird das u.U. nicht passend wiedergeben.
:
Bearbeitet durch User
> Ein Debugger wird das u.U. nicht > passend wiedergeben. Ein Debugger wird u.U. sogar das korrekte Auslesen verhindern, wenn das Progamm im Single-Step durchlaufen wird. Wie schon geschrieben: Manche Register lassen sich nur 1x auslesen. Wenn der Debugger das Register "weggelesen" hat, bleibt fuer das Programm nur ein u.U. falscher Wert uebrig. Wenn man beim Debuggen wissen will, was im Register steht, in den Speicher kopieren und im Programm mit diesem gespeichertem Wert arbeiten.
A. K. schrieb: > Dazu kommt, dass solche Register doppelt existieren, pro Richtung eines, > mt völlig unterschiedlichem Inhalt. Ein Debugger wird das u.U. nicht > passend wiedergeben. Schlimmer: Der Debugger liest das über den normalen Bus aus und setzt damit auch die entsprechenden Zustands Bits (z.B. Receiver not empty) um. Merke: Hardware Register mit Nebenwirkungungen beim Lesen lieber nicht im Debugger anzeigen lassen.
A. K. schrieb: > Daumenregel bei SPI > ist, dass zu jedem put auch ein get gehört, ob man den Inhalt braucht > oder nicht. Das war mein Problem, danke euch für eure Hilfe!
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.