Desactivar interrupciones, ¿para qué?

Hola,
tengo una duda: cuando se utilizan interrupciones externas, hay dos funciones que sirven para activar y desactivar interrupciones.

  • sei()para activar
  • cli() para desactivarlas

Mi pregunta es: si las activo una vez en el setup(), para qué necesito desactivarlas? ¿Existen tareas o funciones que no son compatibles con las interrupciones activadas?

Las interrupciones no hace falta activarlas en el setup. Ya están activas

Estas instrucciones se utilizan en trozos de código críticos que no se pueden "interrumpir". Por ejemplo, dentro de la función millis(), cuando se va a leer el registro del timer del micro se paran las interrupciones para que esa lectura sea correcta, ya que, imagínate, que el timer salta justo entre la lectura de dos bytes del registro y los modifica, tendrías un byte "viejo" y otro "nuevo" y una lectura mala.

En principio, salvo que entres en funciones muy cercanas al hardware y críticas, no es necesario que utilices esas instrucciones.

Queda aclarada mi duda. Gracias