ARDUINO WatchDog в режиме прерываний

Криш

✩✩✩✩✩✩✩
27 Июл 2019
1
0
Здравствуйте! Занявшись простым автополивом, я начал разбираться со сторожевым таймером ардуино. Подучив регистры и выяснив, что у Arduino управляющий регистр называется WDTCSR (а не WDTCR как у Digispark), начал смотреть режимы таймера. В таблице режимов из даташита написано, что если убрать WDE и оставить WDIE, то сторожевой таймер будет находиться в режиме прерываний. Тогда, по идее, не надо будет каждый раз обновлять WDIE (поправьте, если это не так), чтобы таймер не ушёл из режима прерывания/сброс в режим сброса . Чтобы выключить WDE, надо чтобы был включен бит WDCE, который автоматически отключается через 4 такта.
Новый точечный рисунок.png
C++:
 WDTCSR = 0b01110000;
// bitSet(WDTCSR, WDIE); // WDTSCR |= _BV(WDIE);
// bitSet(WDTCSR, WDCE);
// bitClear(MCUSR, WDRF); // MCUSR &= ~(1<<WDRF);
// bitClear(WDTCSR, WDE); // WDTCSR &= ~(1<<WDE);
Serial.print("I WDIE ") ; Serial.println(bitRead(WDTCSR, WDIE));
Serial.print("I WDCE ") ; Serial.println(bitRead(WDTCSR, WDCE));
Serial.print("I WDRF ") ; Serial.println(bitRead(MCUSR, WDRF));
Serial.print("I WDE ") ; Serial.println(bitRead(WDTCSR, WDE));
Так разными командами я пытался присвоить WDE ноль и после проверить результат, но безуспешно. Полагаю, что я не укладываюсь в 4 такта.
И вот, собственно, вопросы: 1)В режиме прерываний не надо будет заново проставлять WDIE, как в режим прерывания/сброса? 2)Можно ли обнулить бит WDE простыми командами языка ардуино? (к ассемблеру и оптимизации я ещё не готов)