Grundsätzlich sollte man in einer ISR wirklich nur die notwendigsten Berechnungen durchführen.
(Funktionen wie sqrt() o.ä. haben dort nichts zu suchen)

Normalerweise geht man vor wie von Fritzli beschrieben.
Man schreibt in der ISR nur die relevanten Daten (Timerstände z.B.) in irgendwelche Variablen, und setzt irgendein Flag.
(damit man in main() sehen kann daß neue Daten da sind die verarbeitet werden müssen)