Hallo, ich betreibe mit einem ATMEGA32 die SPI Schnittstelle mit F_CPU/2. Leider musste ich feststellen, dass von Ende Aussenden SPDR bis zum Aufruf des SPI_STC Interrupts 2.8µs vergehen. Anbei ein Bild, das SCK und einen Pin zeigt, der HIGH gesetzt wird bei Eintritt i ISR(SPI_STC_vect). Kann mir jemand erklären wodurch die Verzögerung zustande kommt? Es läuft übrigens kein anderer Code - anbei der Testschnippsel: int main( void ) { SPCR = (1 << SPE)|(1 << SPIE)|(1 << MSTR)|(1 << CPHA)|(1 << CPOL)|(0 << SPR1)|(0 << SPR1); SPSR = (1 << SPI2X); for(;;) { _delay_ms(10); SPDR=0xFF; } return 0; } ISR(SPI_STC_vect) { RT_PIN_HIGH ... }
My D. schrieb: > dass von Ende Aussenden SPDR bis zum > Aufruf des SPI_STC Interrupts 2.8µs vergehen. Das entspricht ca. 45 Taktzyklen. Schau dir mal das Assembler-Listing der ISR an, ob das hinkommen kann. Der AVR braucht AFAIK 4 Taktzyklen, um überhaupt in die ISR zu springen. Könnte es also sein, dass am Anfang deiner ISR 40 Takte benötigt werden bis der Pin gesetzt wird? Gruß Oliver
Hallo Oliver, hab ich getan. Außerdem hab ich einen Versuch durchgeführt mit und ohne IRQ, sowie ohne und mit Compiler-Optimierung (-os). Interessante Erfahrung. :) Hab die Zeit dazwischen jetzt im Griff. Gruß, Daniel
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.