//enable timer compare interrupt
TIMSK1 |= (1<<ICIE1)|(1<<OCIE1B)|(1<<OCIE1A)|(1<<TOIE1);
In the above you are turning on several interrupts, without providing interrupt routines for them. This is extremely dangerous. Use instead something like
TIMSK1 = (1<<OCIE1A); //enable timer COMPA interrupt
I want to read the middle of a 125kHz square wave
What do you want to "read"? Please explain, as the code is a muddle.
You should avoid using detachInterrupt() if at all possible.