Gast
#366041
Hallo, ich habe gestern schonmal ein Posting (http://www.mikrocontroller.net/forum/read-2-359493.html) gemacht. Da ich jetzt noch einen kleinen Fehler habe, mache ich nochmal einen neuen Thread auf. Bisher klappt die Datenübertragung nur vom Master (ATMEGA128) zum Sklave (ATMEGA32), indem der Master in der Überlauf-ISR eines Timers folgendes macht: - /SS auf Low - SPDR laden und warten auf fertig (Flag-Auswertung) - /SS auf high (Portrichtung PORTB: /SS, SCK und MOSI output "DDRB = 0x07") Auf der Sklave-Seite wird via ISR (SPI Data complete) der empfangene Datenframe an PORTC via "PORTC = SPDR" angezeigt. (Portrichtung PORTB: alle input) Soweit klappt alles einwandfrei. Wie kann ich jetzt gleichzeitig einen Datenframe vom Sklave zum Master übertragen? Ich habe die Portrichtung des Sklave auf DDRB = 0x40 (MISO -> Output) gesetzt. Beim Lesen des Datenblattes habe ich ein paar Probleme. Hier wird beschrieben, dass der Transmitvorgang einfach gepuffert und der Receive doppelt gepuffert ist. Wie beschreibe ich jetzt in der richtigen Reihenfolge das SPI-Datenregister SPDR? Ich wollte es so machen: - Sklave: //SPI transfer complete ISR(SPI_STC_vect) { uint8_t tmp_sreg = SREG; //backup SREG with actual sei() cli(); //disable global interrupt SPDR = 0x04; //MISO-Dode PORTC = SPDR; //MOSI-Data SREG = tmp_sreg; //restore SREG } -Master: Auswertung via ISR des eingehenden Datenframes. Dabei kommt aber nur Mist. Hat jemand eine Idee? Viele Grüße Thomas