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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.