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

 
 
 
Reply to this topicStart new topic
> Программный сброс LPC2366
Yaumen
сообщение Aug 23 2011, 13:38
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



При использовании Watchdog хочу генерить прерывание, в обработчике которого буду записывать в статистику (внешний FRAM) событие, о том что произошло срабатывания сторожевого таймера, после чего хочу процессор все таки перезапустить!!! Как выполнить такой программный сброс, если Watchdog используется не для сброса, а для вызова прерывания!!!

Можно конечно, всегда перезапускать процессор по Watchdog, а при запуске проверять флаг, кто явился инициатором перезапуска и записывать событие, но при этом теряется информация, в каком месте в момент перезапуска находился PC и состояние регистров, чтобы это можно было это использовать при отладке.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Aug 24 2011, 05:52
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Что-то вроде этого?

void (*f)(void) =(void *)0;
f();


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Aug 24 2011, 11:54
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



Это просто запуск программы с 0-го адреса, вряд ли это можно считать полноценным перезапуском!!!
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Aug 24 2011, 13:57
Сообщение #4


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



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

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

Используйте обычный таймер для ваших прерываний, а ватчдог оставьте для перезагрузки:
Код
while(1);
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Aug 24 2011, 14:06
Сообщение #5


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Ну можно в этом прерывании переконфигурировать ватчдог на сброс и запустить его заново в мертвом цикле что приведет к перезапуску процессора.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Aug 24 2011, 17:05
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(MALLOY2 @ Aug 24 2011, 18:06) *
Ну можно в этом прерывании переконфигурировать ватчдог на сброс и запустить его заново в мертвом цикле что приведет к перезапуску процессора.

Для сброса нужно просто в wdt записать неправильную последовательность, не обязательно ждать таймаута по нему.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
Yaumen
сообщение Aug 25 2011, 13:29
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-05
Из: Минск, Беларусь
Пользователь №: 6 213



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 был отдельный флажок, глобального разрешения прерывания, а тут вроде такого нету!!!
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Aug 26 2011, 07:34
Сообщение #8


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



У всех ARM он есть в регистре CPSR, причем FIQ и IRQ раздельно
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:43
Рейтинг@Mail.ru


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