Slave SPI mehrere Byte empfangen

OP #1719900
Lesenswert?

Hi,

ich sende von meinem SPI-Master zwei Byte (das geht auch, mein 
Oszilloskop bestätigt das).
Die Byte werden gesendet, ohne daß die SS-Leitung zwischendurch auf HIGH 
leget wird.
Die Slave-Empfangsroutine sieht wie folgt aus:
1
ISR (SPI_STC_vect)
2
{
3
  data[i] = SPDR;
4
  i++;
5
}

in der Slave-Main werden sollen die zwei Byte per UART ausgegeben 
werden. Alla:
1
  while(1)
2
  {
3
    if(data[1] != 0)
4
      {
5
        i=0;
6
        uart_puts(itoa(data[0],buffer,10));
7
        uart_puts(itoa(data[1],buffer,10));
8
        
9
        data[0]=0;
10
        data[1]=0;
11
      }
12
  }

Nur wird nur das erste Byte ausgegeben und auch nur bei jedem zweiten 
Senden von Master...
Ich find den fehler nicht! Hilfe!

data und i sind wie folgt deklariert:
1
volatile unsigned char data[10], i=0;

Achja, Ich verwende nen ATmega8 und AVR-gcc...

Grüße!
#1720024
Lesenswert?

A. K. schrieb:
> Wobei du zwischen den Bytes ein bischen Zeit lassen solltest, da ein AVR
> beim SPI nicht puffert.

Falsch. Zitat aus dem Datenblatt: "The system is single buffered in the 
transmit direction and double buffered in the receive direction." Beim 
Senden musst du warten, bis das vorherige Byte vollständig gesendet 
wurde, bevor du etwas neues in SPDR schreiben kannst, beim Empfangen 
musst du SPDR auslesen, bevor das zweite Byte vollständig empfangen 
wurde.

Andreas

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