WDT случайно вас не вырубает???
в main() оно может почаще крутилось и сбрасывалось, а когда в прерывание ушли, копирование стало много времени кушать, из-за этого main() не успевает собаку сбросить.
Как вариант не более.
Цитата
контроллер не любит больших программ в прерывании
А больших программ в прерывании мало кто любит. Часто вызываемое прерывание с очень длинной обработкой может подвесить любую отлаженную программу.
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.