Wieso sich der BTFLY aufhängt, muss ich aber noch klären.
Wie ich schon gesagt habe, befrei die ISR von der ganzen Last, Das ist ja eine ziemliche Rumspringerei, was Du da drin hast. SprinterSB hat mal einen Artikel in Wiki geschrieben, was der kompiler aus deinem Code macht, schau mal hier und zwar unter Interrupt und Funktion aufrufen.
Du springst ja aus der ISR in eine Funktion, damit landet einiges auf dem Stack, in der Funktion werden wiederum Funktionen Aufgerufen, da landet wieder was auf dem Stack, vielleicht läuft der Dir über, keine Ahnung.

Gruß Sebastian