Вы угадали. Ваши прерывания написаны так, что не позволяют вложенности. А когда на выходе writeflash() вы их разрешаете, то рушится стек IRQ. Таки дела.
Я предпочитаю писать __interwork чтобы не зависеть от опций компилятора. Но не хотите, как хотите. В Вашем случае это не обязательно.
Цитата
всмысле Interrupt.cpp
это один вектор на все прерывания - от уратов, таймеров, i2c
Я говорил про векторизованные обработчики.