Jump to content

    
Sign in to follow this  
alik_tv

atmega328PA и ее WDT

Recommended Posts

Привет всем

Хотел сделать перезагруз проца по команде, для этого по флажку перестаю сбрасывать собаку.

При этом проц. не перезагружается, а типа виснет. Ни на что не реагирует, кроме аппаратного сброса.

Процедуру для включения собаки делаю в main, саму процедуру взял из его описания.

void WDT_On(void)
{
__disable_interrupt();
__watchdog_reset();

WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE)| (1<<WDP0)| (1<<WDP1)| (1<<WDP2); // 2s
  
__enable_interrupt();
}

Сбрасываю так

if (ucFlagReset == StatusFlag_Off) __watchdog_reset(); 

У этого проца появилось прерывание WDT, поэтому на всякий случай сделал пустое прерывание по WDIF, не помогло.

Пробовал команду сброса делать в прерывании и в бесконечном цикле(зачем?), в main-е, никакой разницы.

В отчаянии полез на столб прочитал errata, ничего похожего там нет.

Явно проблема с головой, не могу понять с чьей.

Прошу помощи.

 

Олег

Share this post


Link to post
Share on other sites

после тщательного изучения матчасти вроде нашел ответ. Завтра проверю.

Note: If the Watchdog is accidentally enabled, for example by a runaway pointer or brown-out condition, the
device will be reset and the Watchdog Timer will stay enabled. If the code is not set up to handle the Watchdog,
this might lead to an eternal loop of time-out resets. To avoid this situation, the application software should
always clear the Watchdog System Reset Flag (WDRF) and the WDE control bit in the initialization routine,
even if the Watchdog is not in use.

 

 

Share this post


Link to post
Share on other sites

При входе в main() первым делом выключите WDT, сбросив WDRF и очистив бит WDE. И только потом делайте свои процедуры настройки WDT. Просто имейте ввиду, что при сбросе активность WDT не меняется (если был включен, то и останется включенным; если был выключен - останется выключенным), а вот биты предделителя WDP[2:0] еще как сбрасываются на свои начальные 16мс, чего Вам вполне может не хватать при старте. Вот и получается бесконечный круговорот сбросов, наблюдаемый как глухой зависон.

Share this post


Link to post
Share on other sites

Привет всем.

Да, дело именно в НЕ сбросе WDT после его сработки.

Вот же ребята фичу сделали, так сделали.

 

Спасибо всем за помощь.

Edited by alik_tv

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this