PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI - Verständnisfrage



hae
29.03.2012, 10:42
Hallo,

bei den SPI-Registern gibt meistens ein Statusbit voll/nicht voll. Dieses Statusbit wird dann gesetzt, wenn 8 Flankenwechsel erkannt wurden, oder?

D.h. wenn ein Flankenwechsel nicht erkannt wird und man auf das Statusbit in einer while-Schleife wartet, hätte man eine schöne Endlosschleife. Hat jemand soetwas schon mal beobachtet?

Rüdiger

Kampi
29.03.2012, 11:44
Hi,

wenn du das SPI Statusregister in µC meinst, dann wird dieses Bit gesetzt sobald in dem Register was drin steht.
Siehe z.B. hier

http://www.atmel.com/Images/doc2503.pdf

auf Seite 138:

Bit 7 – SPIF: SPI Interrupt Flag
When a serial transfer is complete, the SPIF Flag is set. An interrupt is generated if SPIE in
SPCR is set and global interrupts are enabled. If SS is an input and is driven low when the SPI is
in Master mode, this will also set the SPIF Flag. SPIF is cleared by hardware when executing the
corresponding interrupt handling vector. Alternatively, the SPIF bit is cleared by first reading the
SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR).

Und ein Transfer wird als komplett gemeldet (Interrupt), wenn alle 8 Bits aus dem Datenregister rausgeschoben wurde. Dann wird Hardwaremässig das SPIF Flag gesetzt und daran erkennt man einen abgeschlossenen Transfer.
Der SPI im µC ist ja (grob) gesagt nichts anderes als ein Schieberegister. Pro Taktimpuls wird 1 Bit rausgeshiftet und auf der Gegenseite wieder reingeshiftet.