Цитата(OlegHmt @ Jul 5 2012, 08:20)

В новом процесоре возникает проблема с векторами прерываний - нужно изменить VTOR регистр, но это можно делать только в privileged режиме, куда можно попасть только вызвав обработчик exception, если я правильно понимаю. Сначала у меня была идея, после копирования кода в память, выполнять програмный reset и в resetHandler'е анализировать - если перезапуск вызван програмно, тогда изменять VTOR и переходить на код в ОЗУ опять вызывая reset. Но, похоже, это неправильный путь, так как во время перезапуска регистр смещения векторов обнуляется.
Как-то странно всё это, может у SAM-ов так по особенному, но они же вроде Cortex-M3.
Цитата(OlegHmt @ Jul 5 2012, 08:20)

нужно изменить VTOR регистр, но это можно делать только в privileged режиме
Можно в него не входить вообще. Насколько он нужен?
Насколько я понял обычно VTOR меняется в загрузчике на выходе (старт основной программы) и по ходу работы (если нужно).
Можно поменять VTOR после startup основной программы (если в boot-е нет перехода в privileged mode).
Если нужно попасть из основной программы в загрузчик, то можно сделать сброс по запросу (если поддержан и не требует привелегий) или зависанием с ожиданием сброса по WDT.
P.S. Может возможен вариант такой перехода:
Код
uint32_t pc, sp;
sp = *((uint32_t *) 0;
pc = *((uint32_t *) 0x04;
StartResetHandler(sp, pc); // загрузка sp и pc