Did you try COUNT or PULSIN or using TIMER to count freq...
I have set TMR0 to overflow each second and trigger interrupt. In ISR read TMR3, then reset it.
It goes to 50KHz without any problem. You also can use shorter time, but then you have lower resolution.
Bookmarks