Are these Timer/Counter settings right for PWM generation?

  //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.