Ich würde es schon mit dem Input Capture Interrupt machen, weil das praktisch im Hintergrund läuft.

Der Trick dabei ist, das Sensing, also ob der Interrupt auf steigende oder fallende Flanke reagiert in der Interruptroutine umgeschaltet wird.

Das Sensing wird also zunächst auf fallende Flanke eingestellt.
Tritt dieser Interrupt dann auf wird das Input Capture Register ausgelesen und in einer Variable zwischengespeichert.
Zusätzlich wird das Interrupt Sensing auf steigende Flanke umgestellt.

Wird nun irgendwann durch die steigende Flanke der ICP Interrupt ausgelöst, wird das Input Capture Register ausgelesen und der vorher abgespeicherte Wert abgezogen.
Der Unterschied ist das Mass für die gemessene Pausenlänge, also Dein gewünschtes Ergebnis.
Sogleich wird das Interrupt Sensing wieder auf fallende Flanke für die nächste Messung eingestellt.

Ob es dabei zu Überläufen bzw. Fehlberechnungen bei der Subtraktion, kommt wird vom Compiler abhängig sein.
Üblicherweise kommt es bei der reinen Subtraktion von 2 16Bit Unsigned Int Variablen zu keinen Rechenfehlern.
Ich nehm da immer gerne einen 8MHz Quarz und einen Vorteiler von 8, weil dann das errechnete Ergebnis direkt in µs rauskommt.
Die maximal mögliche Messlänge ist dabei 65535µs. Sonst ist ja der Timer ( 16Bit ) bereits einmal komplett durchgelaufen.

Günstig ist es auch, wenn in der Interruptroutine ein Flag ( Bit Variable ) nach einer neuen Berechnung gesetzt wird, damit das Hauptprogramm weiß, das es wieder was zu tun hat.
Wenn das Hauptprogramm den gemessenen Wert verarbeitet hat, wird dieses Flag einfach wieder gelöscht.