SPI Code aus dem Datasheet

OP #1372203
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...
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
Gast
DU mußt aus DEINEM Programm heraus diese Funktion aufrufen. Nach 
Funktionsabarbeitung springt der Controller zurück, auf die Zeile nach 
dem Funktionsaufruf!!!!!!!!!
Hi,

poste doch mal dein komplettes Programm!

Falls du keins hast: Aktivier den SPI-Empfangsinterrupt

PSEUDOCODE:
-----------

isr SPI_SLAVE:
 Byte empfangen
 Flag setzen
 reti


main:

 Aufruf init_spi

nix:
 if Flag gesetzt
   mach was

 goto nix

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.