como dice el amigo pakuak, espero que esto este solucionado, pero por ahi le veo eso de incluir funciones dentro de la interrupcion, ojo no digo que no se pueda a¿hacer, solo es algo que no recomiendo, tampoco es tema de los delay.
Al ingresar a la interrupcion se debe hacer lo menos posible dentro de ella. Sensear quien disparó la interrupcion, setear alguna flag, limpiar los flag antes de salir, esas son las instrucciones basicas y a mi me han servido, quizas con mayores complicaciones del programa se necesite algo mas, pero debe ser lo menos posible.
Tambien uso como ayuda encender algun led para detectar que ha entrado en la interrupcion, a modo de debugger.
Saludos