Commit d6ba83c1acf1b3c7ecabf83bf95cd7b1ceaeb35c
authorWGH <wgh@torlan.ru>
Fri, 10 Dec 2021 01:49:55 +0000 (04:49 +0300)
committerWGH <wgh@torlan.ru>
Fri, 10 Dec 2021 01:49:55 +0000 (04:49 +0300)
WDIE must be automatically cleared only in "Interrupt and System
Reset Mode" (where it's used to transition to "System Reset Mode").

In other modes, watchdog interrupt must not clear WDIE.

Strictly speaking, the modified condition also clears it in
"System Reset Mode" as well, but the system is reset on
interrupt anyway, so it doesn't matter.

See #456

simavr/sim/avr_watchdog.c

index 978d17879556e3f795cd2762b0dc5276eec6fcc0..b7a5d01b1cb54b54fecafa3a38bad33446291675 100644 (file)
@@ -182,7 +182,7 @@ static void avr_watchdog_irq_notify(
         * again when cleared (after servicing), value = 0
         */
 
-       if (!value && avr_regbit_get(avr, p->watchdog.raised)) {
+       if (!value && avr_regbit_get(avr, p->watchdog.raised) && avr_regbit_get(avr, p->wde)) {
                avr_regbit_clear(avr, p->watchdog.enable);
        }
 }