Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программный сброс LPC2366
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Yaumen
При использовании Watchdog хочу генерить прерывание, в обработчике которого буду записывать в статистику (внешний FRAM) событие, о том что произошло срабатывания сторожевого таймера, после чего хочу процессор все таки перезапустить!!! Как выполнить такой программный сброс, если Watchdog используется не для сброса, а для вызова прерывания!!!

Можно конечно, всегда перезапускать процессор по Watchdog, а при запуске проверять флаг, кто явился инициатором перезапуска и записывать событие, но при этом теряется информация, в каком месте в момент перезапуска находился PC и состояние регистров, чтобы это можно было это использовать при отладке.
Lotor
Что-то вроде этого?

void (*f)(void) =(void *)0;
f();
Yaumen
Это просто запуск программы с 0-го адреса, вряд ли это можно считать полноценным перезапуском!!!
ar__systems
Цитата(Yaumen @ Aug 23 2011, 09:38) *
При использовании Watchdog хочу генерить прерывание, в обработчике которого буду записывать в статистику (внешний FRAM) событие, о том что произошло срабатывания сторожевого таймера, после чего хочу процессор все таки перезапустить!!! Как выполнить такой программный сброс, если Watchdog используется не для сброса, а для вызова прерывания!!!

Можно конечно, всегда перезапускать процессор по Watchdog, а при запуске проверять флаг, кто явился инициатором перезапуска и записывать событие, но при этом теряется информация, в каком месте в момент перезапуска находился PC и состояние регистров, чтобы это можно было это использовать при отладке.

Используйте обычный таймер для ваших прерываний, а ватчдог оставьте для перезагрузки:
Код
while(1);
MALLOY2
Ну можно в этом прерывании переконфигурировать ватчдог на сброс и запустить его заново в мертвом цикле что приведет к перезапуску процессора.
Andy Mozzhevilov
Цитата(MALLOY2 @ Aug 24 2011, 18:06) *
Ну можно в этом прерывании переконфигурировать ватчдог на сброс и запустить его заново в мертвом цикле что приведет к перезапуску процессора.

Для сброса нужно просто в wdt записать неправильную последовательность, не обязательно ждать таймаута по нему.
Yaumen
MALLOY2, в USER MANUALе написано вроде, что после того как WATCHDOG разрешен, его уже нельзя переконфигурировать:
Цитата
Once the WDEN and/or WDRESET bits are set they can not be cleared by software. Both flags are cleared by an external reset or a Watchdog timer underflow.

Правда есть примечание, что после после underflow можно, но я не понял как это? В прерывании от watchdog ?

Andy Mozzhevilov, проверил, послав последовательность (0x55, 0x00) WDFEED. Перезапуск произошел. Спасибо огромное, то что надо!!!
За одно и ошибка нашлась, на время правильной последовательности необходимо запрещать прерывание, иначе будет несанкционированный перезапуск. Самое интересное в User Manual про это написано, видать проморгал!!!

Осталось определить как в процессоре глобально запретить и разрешить все прерывания разом, в старых добрых процах MCS51 и AVR был отдельный флажок, глобального разрешения прерывания, а тут вроде такого нету!!!
MALLOY2
У всех ARM он есть в регистре CPSR, причем FIQ и IRQ раздельно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.