Ok das mit dem volatile ist klar, das habe ich vergessen! Trotzdem
funktioniert es leider nicht. Habe nun auch das Bit in TIFR anders
gesetzt, bzw gelöscht.
Ich habe mal irgendwo gelesen, dass man dieses Flag löschen in die
Interrupt Routine reinschreiben kann oder sollte. Aber verstehe nicht
warum? Wird doch eh gelöscht wenn die Routine fertig ist oder?
Das Problem mit dem Toogeln in der mainwhile was mein Timer
durcheinanderbringt ist nun erstmal nebensächlich. Ich lasse ja am
Anfang der Interrupt Routine einen Ausgang umschalten und nun auch noch
am Ende, um praktisch zu messen wie lange die Interruptroutine
durchläuft. Ich habe die Assembler Befehle für mehrere mögliche
durchläufe gezählt und bin bei einer Variante z.B. auf 120 Befehle
gekommen. Angenommen jeder Befehl benötigt einen Takt, währen das bei
16MHz 7,5µs. Schau ich mir jedoch meinen Ausgang an, welcher mir das
Ende der Routine anzeigt, ist dieser ungefähr bei 55µs. Also selbst wenn
der ein oder andere Assembler Befehl mehr als einen Takt braucht, ist
das nicht schlüssig.
Wie kann es sein, dass eine Interruptroutine doch noch irgendwie länger
braucht? Habe ich irgendetwas vergessen zu beachten? Wie viele Takte
werden benötigt, um nach einem match mit den push's am Anfang der
Interrupt routine zu beginnen?
Im Datenblatt konnte ich das nicht finden. Ich fand nur, dass das OC...
Flag einen Takt nach dem match gesetzt wird.