Register nicht korrekt gelesen? (STM32, SPI, KEIL µVision)

Gast #4400341
Lesenswert?
• ▲
▼
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?
Angehängte Dateien:
#4400353
Lesenswert?
• ▲
▼
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.
Gast #4400431
Lesenswert?
• ▲
▼
> 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.
#4400439
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren