SPI Code aus dem Datasheet

OP #1372203
Lesenswert?

Hallo,

ich hoffe sehr, jemand kann mir helfen. Ich möchte die SPI-Kommunikation 
einen µCs und eines CO-Prozessors abfangen. Dazu verwende ich meinen 
STK500 mit Atmega8515.

Auf S. 130 im Datasheet des 8515 steht

The following code examples show how to initialize the SPI as a Slave 
and how to perform a simple reception.

******************************
SPI_SlaveInit:
; Set MISO output, all others input
ldi r17,(1<<DD_MISO)
out DDR_SPI,r17
; Enable SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret

SPI_SlaveReceive:
; Wait for reception complete
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Read received data and return
in r16,SPDR
ret
*******************************

Frage:
1. Kann ich mit dem obigen Code nun wie gehofft, die Daten abfangen?
2. Wann kommt das Programm eigentlich von "SPI_SlaveInit" weg zu 
"SPI_SlaveReceive"? Der erste ret Befehl sorgt doch für eine Schleife 
mit einem Jump zu "SPI_SlaveInit", oder?

Ich danke im Voraus schon für eure Mühe...
#1372214
Lesenswert?

Hallo,

das ist das Programmierbeispiel für einen SPI-Slave, ja.

Die erste Subroutine initialisiert die SPI HArdware, die zweite empfängt 
ein Byte vom SPI.

Wann die wo in Deinem Programm aufgerufen werden, muß Du ja entscheiden.

Initialisieren muß man die Hardware ja normalerweise nur einmal beim 
PowerOn-Reset,
wann was empfnagen werden osll und was mit den Daten passieren soll, 
mußt Du ja programmieren.
Die zweite Subroutine wartet, bis ein Byte im SPI angekommen ist und 
kehrt dann mit diesem Byte in r16 zurück. Mehr nicht.

Gruß aus Berlin
Michael

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