Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Watchdog Timer
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Pavel V.
Пытаюсь использовать сторожевой таймер в своем устройстве по прямому назначению (т.е. в режиме сторожевого таймера), но получаю не совсем понятную реакцию.

Приведу свой код:

Код
#pragma vector=NMI_VECTOR
#pragma type_attribute=__interrupt
void osc_fault(void)
{  
      BCSCTL2 = SELM_0 + DIVM_0 + DIVS_0;                       // DCO
      BCSCTL1 = DIVA_0 + RSEL2 + RSEL1 + RSEL0;               //ACLK=XT1/1=32768
      DCOCTL = DCO0 + DCO1 + DCO2;                                 //DCO 6 MHz
      while ((IFG1&OFIFG) != 0) IFG1 &= ~OFIFG;  

      BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;              //MCLK=XT2/1=8000
                                                                                             //SMCLK=XT2/1=
      IE1 |= OFIE;
}

int main( void )
{
    WDTCTL = WDTPW + WDTHOLD;         // Stop watchdog timer to prevent time out reset
    IFG1 |= OFIFG;                    // Set flag OFIFG
    IE1 = OFIE;                       // Enable IRQ from OSC fault
          
    adc_init();
    initTimerA();
    I2CInit();
    LCDInit();
    
    WDTCTL = WDT_ARST_1000;  // WDTPW+WDTCNTCL+WDTSSEL

    while(1)
    {


               [здесь выполняется некая процедура длительностью много меньше 1 с]


          WDTCTL = WDTPW + WDTCNTCL; // Clear watchdog cnt
    }
}



В результате с периодом 1 с я попадаю в прерывание NMI_VECTOR.

Что я делаю неправильно? Как вообще необходимо работать со сторожевым таймером? Я использую его первый раз.

Спасибо!
MrYuran
#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */
ни о чём не говорит?

я о том, что такой строчкой вы пытаетесь сбросить вочдог...
насколько я понимаю, сброс по вочдогу произойдёт через 32мс после этого.
Pavel V.
Все, понял свою ошибку smile.gif

Надо в цикле выполнять WDTCTL = WDT_ARST_1000;

Спасибо!
bloodden
Я вчера тоже попался на этот прикол. Ноги растут из каких-то сэмплов.
WDTCTL = WDTPW + WDTHOLD; - там в комментариях к этой строчке написано что сбрасываем собаку smile.gif
Вот народ и попадается периодически.
Сергей Борщ
Цитата(bloodden @ Jun 3 2008, 11:38) *
Я вчера тоже попался на этот прикол. Ноги растут из каких-то сэмплов.
WDTCTL = WDTPW + WDTHOLD; - там в комментариях к этой строчке написано что сбрасываем собаку smile.gif
Вот народ и попадается периодически.
Аналогично sad.gif Только комментарий "сбрасываем собаку" во всех усер гадах относится к другой строке:
Код
; Periodically clear an active watchdog
MOV #WDTPW+WDTCNTCL,&WDTCTL
которая кроме сброса переключает собаку на 32768 периодов SMCLK.
Сергей Борщ
Цитата(bloodden @ Jun 3 2008, 11:38) *
Я вчера тоже попался на этот прикол. Ноги растут из каких-то сэмплов.
WDTCTL = WDTPW + WDTHOLD; - там в комментариях к этой строчке написано что сбрасываем собаку smile.gif
Вот народ и попадается периодически.
Я написал им запрос по этому поводу и получил вот такой ответ, который больше тянет на отмазку:
Цитата
Цитата
Question #2.
In the same slau144e (but in the UG for other families as well) part Watchdog timer, note 10.2.7. Software examples there is a following example:
; Periodically clear an active watchdog
MOV #WDTPW+WDTCNTCL,&WDTCTL
;
; Change watchdog timer+ interval
MOV #WDTPW+WDTCNTL+WDTSSEL,&WDTCTL

But there is no mentioning that except reset watchdog first command also switch clocking watchdog for SMCLK/32768 and switch pin RST/NMI into Reset mode.
I think this example should be changed and it should be clearly shown that in Reset command you should set the same bits which were used with watchdog start. Something like:
; Start watchdog in watchdog mode with ACLK/8192 period:
MOV #WDTPW+WDTCNTCL+WDTSSEL+WDTIS0,&WDTCTL
; Periodically clear an active watchdog
MOV #WDTPW+WDTCNTCL+WDTSSEL+WDTIS0,&WDTCTL

Or you should mention in the comments that this is repeating watchdog reset, set for SMCLK/32768 with RST/NMI in Reset mode.
Search in several forums shows that I am not the only one who met this problem.
Please be aware that the User’s Manual includes only a very small number of examples. There are some more watchdog examples included into TI code examples - which of course also not showing all possible settings. The User’s Manual is showing all available register/settings and also the standard register setting after a reset. Customer need to check/select the optimal settings fitting best to his application.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.