Hallo Zusammen, ich habe folgendes Problem: Ich habe den vs1011 am Laufen am SPI, ich kann auch senden (Mastermode). Sobald ich jedoch folgendes Konstrukt aufrufe, stoppt alles. Nichts geht mehr weiter. Was mach ich falsch? uint8_t SPIreadwrite (uint8_t data) { while(!(SPSR & (1<<SPIF))); SPDR=data; while(!(SPSR & (1<<SPIF))); return SPDR; } Das hier geht ohne weiteres: (ich schreibe nur zum vs1011 und lese nicht) void SPIwrite (uint8_t data) { while(!(SPSR & (1<<SPIF))) ; SPDR=data; } Vielen Dank freddyv.95
Zusatz: Weiß nicht ob das von Bedeutung ist, aber Prescaler sollte 0 sein und spi2x ist gesetzt.
When a serial transfer is complete, the SPIF Flag is set. An interrupt is generated if SPIE in SPCR is set and global interrupts are enabled. If SS is an input and is driven low when the SPI is in Master mode, this will also set the SPIF Flag. SPIF is cleared by hardware when executing the corresponding interrupt handling vector. Alternatively, the SPIF bit is cleared by first reading the SPI Status Register with SPIF set, then accessing the SPI Data Register (SPDR). Beantwortet deine frage eingentlich schon.
Danke erstmal, ist mir auch klar und so wie ichs gepostet habe, kanns also wirklich nicht gehen. Aber: Ich habe jetzt die erste while gelöscht und es funktioniert trotzdem nicht. Der Aufruf sieht so aus: ENC28j60port &= ~(1<<ENC28j60cs); SPIreadwrite(0x1F); SPIreadwrite(0xFF); ENC28j60port|= (1<<ENC28j60cs); Sobald ich die SPIreadwrite auskommentiere geht der Rest wieder.
Nutzt du den SS-Pin? Wenn nicht musst du ihn als Ausgang schalten. Wenn der als Input ist und unbeschaltet kann es sein, dass er in Slave-Mode umschaltet und dann bleibt das Programm stehen.
OK, habs gefunden. Danach hab ich dann wieder die SPIwrite aufgerufen und das geht natürlich nicht, weil die dann hängen bleibt. Vielen Dank!! Noch was: Kann man das SPIF-bit eigentlich auch selbst setzen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.