Hallo,
bei einem Atmega32 soll als Reaktion auf einen Externen Interrupt ein
Pin gesetzt werden. Funktioniert soweit auch prima. Allerdings dauert
das ganze vom Setzen des Interrupteingangs bis die steigende Flanke am
Ausgang auf High-Pegel ist ganze 4µs.
Die 4µs passen ungefähr zur länge des von GCC erzeugten Maschinencodes.
Das Datenblat sagtt, daß die minimale Reaktionszeit 4 Taktzyklen
beträgt. Das wären dann 500ns. Da ist natürlich die Ausführung des
eigentlichen Anwendungsprozesses nicht mit drin. Aber für die ganzen
Stackoperationen benötigt der compilierte Code alleine deutlich länger,
als diese 500ns
(weil insgesamt mehr Funktionen als für 4 Zyklen sind).
Gibt es irgendwelche Standardverfahren, wie man genau diese Sache
schneller machen kann, d.h. Interrupt -> Pin setzen? Evtl. die Sicherung
der Register vor den Funktionsaufruf ziehen (wenn man weiß, daß als
nächstes nur der interrupt kommen kann)?. Kann man die
Vergleichsoperationen irgendwei vorbereiten?
1 | SIGNAL(SIG_INTERRUPT0)
|
2 | {
|
3 | PORTD |= (1<<PD1);
|
4 | PORTD &= ~(1<<PD1);
|
5 | }
|
Assemblercode wird heute nachmittag nachgeliefert.
Gruß,
Harald