Gast
#681797
Hallo, ich bin mit einem ATMega16 an einem Projekt dran. Ich benutze AVR Studio und einen Billig ISP Parallelport Programmer (2 Widerstände). An dem SPI hängt ein Dataflash und ein FPGA (später noch eine SD-Card). Funktioniert alles wunderbar. Jetzt habe ich aus Speicherplatz gründen einen ATMega644 eingesetzt. Alle Register angepasst und habe nun das Problem, das das senden von SPI (warten auf das SPIF-Bit) nur für ein einziges Byte funktioniert. Sprich : Ich sende ein Byte, und beim 2. Byte bleibt der uC in der While-Schleife hängen. Ich habe den ganz normalen "Standard" Code für SPI verwendet void vSPIInit (void) { PRR &= ~(1 << PRSPI); DDRB |= (1<<5)|(1<<7); SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0); SPSR = 0; } UCHAR ucSPITransceiveByte (UCHAR ucData) { PRR &= ~(1 << PRSPI); SPDR = ucData; while(!(SPSR & (1<<SPIF))); return SPDR; } Im Datenblatt steht auch nicht viel mehr (bis auf das man PRR auf 0 bzw. das 2. Bit im PRR löschen sollte/muß) Was kann das sein, das so etwas einfaches nicht funktioniert ?! Vor allem hatte ich auf dem ATMega16 keine solchen Probleme. Und das SPI-Interface sollte doch so einfach sein das es sich ohne größere Probleme portieren (zumindest auf den ATMegas) lässt oder ? Gruß Rene