Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Watchdog
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
wmakc
в Атмеловском загрузчике поменял строчку AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
на AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDV | AT91C_WDTC_WDD | AT91C_WDTC_WDRSTEN;

в самой программе периодически сбрасываю таймер:
AT91C_BASE_WDTC->WDTC_WDCR = AT91C_WDTC_KEY | AT91C_WDTC_WDRSTT;

Проверял, если не сбрасывать таймер, то он перезапускает контроллер. Все как и должно быть. Но в программе, которую я использую, он не всегда срабатывает. То есть существуют ситуации, когда контролер зависает, и перезапускается только через пару часов. Такое может быть или же watchdog срабатывает всегда и я что-то не так делаю?
DmitryM
Цитата(wmakc @ May 22 2011, 22:00) *
в Атмеловском загрузчике поменял строчку AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
на AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDV | AT91C_WDTC_WDD | AT91C_WDTC_WDRSTEN;

в самой программе периодически сбрасываю таймер:
AT91C_BASE_WDTC->WDTC_WDCR = AT91C_WDTC_KEY | AT91C_WDTC_WDRSTT;

Проверял, если не сбрасывать таймер, то он перезапускает контроллер. Все как и должно быть. Но в программе, которую я использую, он не всегда срабатывает. То есть существуют ситуации, когда контролер зависает, и перезапускается только через пару часов. Такое может быть или же watchdog срабатывает всегда и я что-то не так делаю?

а AT91C_WDTC_WDV и AT91C_WDTC_WDD правильно задаются? Я с WDT пока не замечал шаманств. Чему соответствуют указанные поля?
aaarrr
Цитата(wmakc @ May 22 2011, 22:00) *
То есть существуют ситуации, когда контролер зависает, и перезапускается только через пару часов.

Причину зависания установили?
wmakc
если я правильно перевел информацию в документации, то wdv - это максимальное время работы таймера. wdd - это время в течение которого, таймер должен быть сброшен, иначе он вернет ошибку. Сообщать об ошибках мне не нужно, поэтому я их не меняю. По умолчанию они одинаковые и настроенны на максимум, на 16 секунд.

Цитата(aaarrr @ May 22 2011, 22:16) *
Причину зависания установили?

Еще пока нет, предположительно при включении не инициализируется матрица, то есть не возвращает необходимые значения по TWI. Из-за этого и происходит зацикливание в программе.
aaarrr
Цитата(wmakc @ May 22 2011, 22:24) *
если я правильно перевел информацию в документации, то wdv - это максимальное время работы таймера. wdd - это время в течение которого, таймер должен быть сброшен, иначе он вернет ошибку. Сообщать об ошибках мне не нужно, поэтому я их не меняю. По умолчанию они одинаковые и настроенны на максимум, на 16 секунд.

Он не "вернет ошибку", а сбросит процессор, если это действие разрешено (WDRSTEN). С оконным режимом было бы надежнее.

Я бы на вашем месте проверил еще источник SLCK, если в качестве такового используется кварц.
wmakc
То есть как я понимаю, мне необходимо установить wdd меньше wdv?
aaarrr
Цитата(wmakc @ May 22 2011, 23:06) *
То есть как я понимаю, мне необходимо установить wdd меньше wdv?

Да, и сбрасывать WD только в разрешенный период. По крайней мере, так можно отсеять наиболее простые программные ошибки, приводящие к "отказу" WD.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.