Umsetzen einer SPI Client-Server-Struktur
|
Das Konzept
|
Das Server Programm (Fragment)
void datenaustausch() { for(i=0;i<KANALANZAHL;i++) //Alle Kanäle durchgehen { timeout = 0; while(!pruefeKanalbereitschaft(i) && timeout<10000) timeout++; timeout = 0; timeout=false; //Wenn Kanal bereit, kompletten Speicherinhalt senden und Inhalt des aktuellen Kanals merken if(pruefeKanalbereitschaft(i)) { aktiviereKanal(i); //Interrupt bei Client auslösen. for(k=0;k<KANALANZAHL*SPI_NACHRICHT_BYTEANZAHL;k++) { zeichen_senden = speicher[k]; zeichen_empfangen = senden_empfangen(zeichen_senden); if(timeout_aufgetreten==true) break; //nur wenn Zeichen im Speicherbereich des aktuellen Kanals steht, das //korrespondierende Zeichen in speicher überschreiben: if(k/SPI_NACHRICHT_BYTEANZAHL==i) speicher[k]=zeichen_empfangen; } //Interrupt zurücksetzen: deaktiviereKanal(i); } if(timeout_aufgetreten==true) { deaktiviereKanal(i); //SPI-Schnittstelle ausschalten: SPCR = (0<<SPIE) | (0<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); for(pause=0;pause<1000;pause++); //SPI-Schnittstelle als Master ohne Interrupts konfigurieren und starten: SPCR = (0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (0<<SPR1) | (0<<SPR0); for(pause=0;pause<1000;pause++); } } }
Code 0-1: Das Serverprogramm.
Das Client-Programm (Fragment)
Bild 0-1: Das Client-Programm.
Versuchsaufbau
Bild 0-2: Versuchsaufbau 1.
Bild 0-3: Versuchsaufbau 2.
Ergebnis über Hyperterminal visualisiert
Bild 0-4: Test mit RS232.