реклама на сайте
подробности

 
 
> Программный рестарт MSP430F5438A, не работает, зараза. А на F2618 "прокатывало"
k155la3
сообщение Dec 29 2016, 07:45
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Как правильно сделать программный рестарт в MSP430F5438A ?
(IAR, MODEL == LARGE)

То, что работало на F2618, не прокатывает:
Код
void SystemReStart()
{
        __disable_interrupt();
    asm ("push &0xfffe");
    asm ("ret");        
};

Код этой функции размещен в "за-64К" области.

Насколько удается посмотреть на отладчике, после этой процедуры идет влет в пустую область памяти 0xFF.

Изменил на asm для 20-битного адреса (pushx.a, reta) - "рояль не заиграл".

Ресет успешно выполняется способами
- старта WDT
- "подсовывания" перехода на команду, находящуюся не в программной памяти а в области адресов регистров (fetch)

(?) что может быть не так с "прямым" вызовом push+ret ?

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
controller_m30
сообщение Dec 29 2016, 22:52
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Сам пока не пробовал делать программный 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
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 17:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016