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

 
 
> Watchdog Timer, Работает не так как хочется
Pavel V.
сообщение Jun 3 2008, 07:26
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Пытаюсь использовать сторожевой таймер в своем устройстве по прямому назначению (т.е. в режиме сторожевого таймера), но получаю не совсем понятную реакцию.

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

Код
#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.

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

Спасибо!


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 09:04
Рейтинг@Mail.ru


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