Du brauchst auch noch Rechenzeit, um die Impulse zu verarbeiten.
Ich weiß nicht genau, was Du machen willst aber für maximale
Geschwindigkeit würde ich es so machen:
Timer starten mit Interrupt, der eine globale Variable (z.B. globvar)
auf 0 setzt.
Eine Schleife mit while (globvar), in der Du die Impulse zählst.
Sobald der Timer abgelaufen ist, setzt er die Variable, deine Schleife
endet und Du weißt, wieviele Impulse in der Timerzeit aufgetreten sind.
Jetzt kannst Du im Datenblatt schauen, wieviele Zyklen jede dieser
Operationen braucht, die 18MHz dadurch teilen und Du hast deine maximal
erfassbare Frequenz.
Ausm Bauch dürfte das weit unter 1MHz liegen.
Es gibt MCUs, die eine PWM automatisch lesen, wie z.B. der STM32.
Da der auch gleich mit 72MHz läuft, geht da einiges mehr.