Zwei MC miteinander über SPI verbinden

Gast #1370400
Ich habe zwei MC über SPI (Haupttakt/4) miteinander verbunden. Mein 
Master gibt den Takt (SCK), CS und die Daten (Mosi) an den Slave.


Der Slave soll diese Daten mit einem Interrupt verstehen und 
abspeichern. Er erkennt diese Daten aber leider nicht. Weiß nicht mehr 
weiter....
Habe folgende Einstellungen im Slave getroffen:

SPI initialisierung:

void SPI_Slave_INIT(void)
{
SPCR |= (1<<SPE) | (0<<MSTR) | (1<<SPIE);
}

Interrupt Funktion (Daten sollen per Interrupt erkannt und in der 
globalen Variable RECEIVE_u8[1] gespeichert werden- ich denke hier 
stimmt etwas nicht!!

SIGNAL (SIG_SPI)
{
RECEIVE_u8[1] = SPDR;
while(!(SPSR & (1<<SPIF)));
}


In der Main soll die Variable (mit Pulse an PD1) ausgegeben werden

int main (void)
{
init_ports();        //Portinitialisierung
sei();          //Globale Interrupts aktiviert

//INIT SPI
SPI_Slave_INIT();


  while(1)
  {


  for (int16_t n = 0; n < RECEIVE_u8[1] ; n++)
  {
         PORTC &= ~ (1<<PC1);
  _delay_us(10);
          PORTC |= (1<<PC1);
  _delay_us(10);
  }
         _delay_ms(10);


}
Gast
Ich habe die Variable als Volatile deklariert:

volatile unsigned char Receive_u8[10];

stimmt doch alles?


Hate es vielleicht mit dem Interrupt zu tun? Schlägt der Interrupt 
vielleicht nur zu wenn Daten eingelesen sind  und nicht schon beim 
Empfangen? Dann müßte ich ohne Interrupt arbeiten mit einer Schleife die 
immer wieder den SPI-Eingang abfragt...
Gast
Also bei einer While-Schleife in der ISR bei der auf ein externes 
Ereignis gewartet wird klingeln bei mir schonmal die Alarmglocken.


Ich würde den Empfang so machen:

ISR(SPI_STC_vect)
{
 rxbuffer = SPDR;
}

Der Interrupt löst nach empfang der Nachricht aus. Da braucht man auf 
nix anderes zu warten.

Mfg

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.