Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как в IAR ARM сделать программный reset LPC2148?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MagRiv
Как в IAR ARM сделать программный reset LPC2148?
zltigo
Цитата(MagRiv @ Jul 16 2007, 13:04) *
Как в IAR ARM сделать программный reset LPC2148?

Конкретизируйте вопрос. Что называете reset? Тупой переход на нулевой адрес? Тогда как и положено в 'C' вызов функции адрес которой 0 и IARовские навороты тут никчему. Вообще-то единственый правильный reset это активация Watchdog и/или выполнение процедуры сброса с Watchdpg с ошибкой.
Leen
Ну, не знаю, может есть что-то узкоспециализированное, только для LPC21... В любом контроллере есть сторожевой таймер. Есть также и вход внешнего сброса. Вариант первый - завести таймер на интервал покороче и "забыть" про то, что он запущен. Собственно, это его функция - сбрасывать контроллер. Вариант второй - соединить какой-нибудь ненужный вывод со входом nRST.. Тогда даже задержки не будет - дернул разок - и в нокаутеsmile.gif Главное, чтобы по включению вывод, используемый для этого, не был сконфигурирован как выход с записанным в него нулем. А то камень так и будет в ресете. Еще неплохо подвесить на эти объединенные ноги ВНЕШНИЙ подтягивающий резистор. А то, опять-таки, контроллер может примитивно не выйти из сброса.
Можно еще, думаю, поизвращаться с монитором питания - он тоже надежно сбрасывает все внутренности камня. Но это уже сложнее, навскидку варианта не предложу. Мне когда-то второго (на PIC'ах, правда, но не одни ли фаберже yeah.gif ) хватило за глаза.
zltigo
Цитата(Leen @ Jul 16 2007, 13:25) *
ариант второй - соединить какой-нибудь ненужный вывод со входом nRST.. Тогда даже задержки не будет - дернул разок - и в нокаутеsmile.gif

Ага, а поскольку длинна импульса сброса обычно нормируется, а сброс таким образом получается непредсказуемый, то нокаут действительно может оказаться ПОЛНЫМ smile.gif. Таким способом только ресетчик можно дергать гарантированно спокойно, но не сам контроллер напрямую.
Leen
Мндя... Не знал, что у LPC настолько убогий контроллер сброса.. А может, это просто впечатления по сравнению с SAM7. Ну да Аллах с ними, да и с нами также. На самом деле, правильнее все ж использовать WDT.
ЗЫ: а что такое "ресетчик"? Уж не обессудьте, темный я пока.
zltigo
Цитата(Leen @ Jul 16 2007, 13:52) *
Мндя... Не знал, что у LPC настолько убогий контроллер сброса..

Я не знаю насколько он 'убогий' у LPC - не разбирался за ненадобностью, но у AVR Atmel имено такой smile.gif
Цитата
а что такое "ресетчик"? Уж не обессудьте, темный я пока.

Специализированный чип для мониторинга (по амплитуде и времени)за одним или несколькими напряжениями питания и формирования гарантированного по длительности импульса сброса при выходе напряжений питания за границы мониторинга. Обслуживание кнопки сброс тоже может иметь.
MagRiv
Спасибо за ответы.
Мне нужно программно перевести контроллер в начальное состояние (как при подаче питания) и стартануть программу заново.
Видимо вариант с watchdog будет наилучшим.
zltigo
Цитата(MagRiv @ Jul 17 2007, 16:06) *
Видимо вариант с watchdog будет наилучшим.

Без вариантов.

Код
    WDTC    = WD_TIMEOUT;     // WatchDog time
    WDMOD    = 0x3;             // WatchDog mode
    WDFEED    = 0xAA;       // Start Watchdog
    WDFEED    = 0x55;            //


При работающем Watcdog достаточно неправильной последовательности деактивации, и сразу reset
даже не дожидаясь таймаута.
Код
    WDFEED    = 0xAA; // Bad Watcdog Sequence ---> Reset
    WDFEED    = 0x66;     //
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.