Wenn du ohne ISR arbeitest, dann wird irgendwann eine IRQ ausgelöst und du landest im Nirvana, genauer bei __bad_interrupt, was auf einen Soft-Reset angebildet wird.
Wenn du sei() benutzt, musst du ISRs für alle IRQs zur Verfügung stellen, die auftreten können (hier: SIG_INPUT_CAPTURE1).
Offenbar willst du aber erst mal ohne Interrupts arbeiten.
Dann wirf das sei() raus und lass erst mal die Finger von TIMSK
Bevor du auf das ICF1-Flag wartest, musst du es erst mal rücksetzen auf 0. Des geht, indem man eine 1 hinschreibt wie oben gesagt. Die anderen Flags werden nicht angefasst durch das 0-Schreiben.
TIFR = _BV(ICF1);
Danach wartest du:
while (!(TIFR & _BV(ICF1))) // Flag==0 --> *schnarch*
...
Dann wirst du die Flanke umschalten wollen, falls du nicht auf beide Flanken konfiguriert hast.
Nach dem Flanken-Umschalt und vor dem nächsten Warten: wieder ICF1 resetten.
Lesezeichen