Пытаюсь использовать сторожевой таймер в своем устройстве по прямому назначению (т.е. в режиме сторожевого таймера), но получаю не совсем понятную реакцию.
Приведу свой код:
Код
#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.
Что я делаю неправильно? Как вообще необходимо работать со сторожевым таймером? Я использую его первый раз.
Спасибо!