Administrar interripciones

Hola compis,

Estoy trabajando con un Arduino Mega 2560. Tengo dos interrupciones activas, las cuales deben mirar un bit de un registro en otro chip (comunicación I2C con el otro chip). Estas interrupciones son de soft. (TIMER, por ahora estoy empleando la TIMER3 y TIMER4).
Las manejo bien, puedo enviar datos por el terminal (a 9600 baudios), encender LEDs (he probado hasta tener 4 interrupciones que controlan 1 LED cada una).
El problema viene cuando tengo procesos largos, como por ejemplo un bucle FOR (para pruebas) muy largo, o el caso real, leer los datos I2C, se cuelga el sistema. El objetivo final, sería que si tengo una interrupción, en ejecución, las demás no afecten hasta que no termine la actual.

He estado probando a deshabilitar interrupciones (con noInterrupts y cli), prioridad de las interrupciones (la TIMER3 tiene más que la TIMER4), poner flags para que no entre en la interrupción completa (es una mala solución, pero por probar) y alguna cosilla más que no recuerdo. Y no ha habido manera, seguía quedándose colgado.

¿Qué podría hacer para cuando tenga una interrupción, las demás no afecten hasta que la actual no haya terminado? (si es preciso, se puede desechar las interrupciones no atendidas).

Gracias de antemano.

Saludos