Forum: Mikrocontroller und Digitale Elektronik SPI_STC Interrupt stark verzögert?


von My D. (mydani)


Angehängte Dateien:

Lesenswert?

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
...
}

von Oliver J. (skriptkiddy)


Lesenswert?

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

von My D. (mydani)


Lesenswert?

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