Сам пока не пробовал делать программный reset, но вот что нашел. Сброс контроллера можно вызвать:
1. Сброс PUC происходит при записи в FCTL1 (Flash Memory Controller) пароля, отличного от 0xa5.
2. Тоже при неправильном пароле для WDTCTL, отличном от 0х5а.
3. Тоже самое для регистра PMMCTL0 (отличие пароля от 0ха5).
4. Ещё в регистре PMMCTL0 есть биты PMMSWPOR и PMMSWBOR, которые программно (если правильно понял) вызывают Reset типа POR и BOR соотв.
5. При выборке команды из адресного пространства ввода/вывода.
А чего оно не выбирает адрес сброса...
Можно после команды
asm ("push &0xfffe") посмотреть отладчиком, что на вершине стека оказалось.
Или, чтоб не искать ту вершину стека, следующей-же командой снять данные с вершины в какой-нить регистр (напр.
asm ("pop r4")), и посмотреть, что оказалось в регистре (PC ведь тоже регистр - R0, так что разница только в номере).
Ещё варианты без обращения в стек:
Код
mov &0xfffe,r14
mov r14,PC
;--------------
или так
mov #0xfffe,r14
mov @r14,PC
;-------------
или совсем напрямую
mov &0xfffe,PC
Сообщение отредактировал controller_m30 - Dec 29 2016, 22:52