Might have missed a step or two, did this from memory, but...
Dedicate a timer just for this.
Feed the signal into one of the input capture pins
Setup the timer clock so that it wont overflow until a bit after 250hz
Set timer to input capture on rising edge.
Now you can enable interrupt on input capture event.
On interrupt save capture timer value (number of timer ticks of "high" waveform). Then clear timer value change the input capture to falling edge.
When the interrupt next occurs you have the number of timer ticks of "low" waveform. Now you can calculate the duty. Set the timer back to capture on rising edge again and the cycle repeats.
Ideally you want to do the duty cycle calculation in the main loop and just save the values in the interrupt.
Ya want to keep the slow float/divide function out of the interrupt handler
And, as always, dont forget to use volatile