Forum: Compiler & IDEs SPI Problem - Atmega1284p


von freddyv.95 (Gast)


Lesenswert?

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

von freddyv.95 (Gast)


Lesenswert?

Zusatz:
Weiß nicht ob das von Bedeutung ist, aber Prescaler sollte 0 sein und 
spi2x ist gesetzt.

von Chris (Gast)


Lesenswert?

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.

von freddyv.95 (Gast)


Lesenswert?

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.

von Chris (Gast)


Lesenswert?

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.

von freddyv.95 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.