aboutsummaryrefslogtreecommitdiffstats
path: root/Bootloaders/CDC/BootloaderCDC.c
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2014-10-12 16:43:30 +1100
committerDean Camera <dean@fourwalledcubicle.com>2014-10-12 16:43:30 +1100
commita09cb7e3d8d6256f5610459ee8dd80e0efd741f7 (patch)
treefd87b7ee781ca797d3ce26085c5e05ad4f7c38da /Bootloaders/CDC/BootloaderCDC.c
parent4c637c93ba69e33c77034eef9bd4433252e139fc (diff)
downloadlufa-a09cb7e3d8d6256f5610459ee8dd80e0efd741f7.tar.gz
lufa-a09cb7e3d8d6256f5610459ee8dd80e0efd741f7.tar.bz2
lufa-a09cb7e3d8d6256f5610459ee8dd80e0efd741f7.zip
Fix bootloaders not starting user application if the HWB is grounded during watchdog reset.
Diffstat (limited to 'Bootloaders/CDC/BootloaderCDC.c')
-rw-r--r--Bootloaders/CDC/BootloaderCDC.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/Bootloaders/CDC/BootloaderCDC.c b/Bootloaders/CDC/BootloaderCDC.c
index 1f076530d..63991de75 100644
--- a/Bootloaders/CDC/BootloaderCDC.c
+++ b/Bootloaders/CDC/BootloaderCDC.c
@@ -103,8 +103,19 @@ void Application_Jump_Check(void)
if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
JumpToApplication = true;
+ /* Clear reset source */
MCUSR &= ~(1 << EXTRF);
}
+ else
+ {
+ /* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
+ * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
+ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
+ JumpToApplication = true;
+
+ /* Clear reset source */
+ MCUSR &= ~(1 << WDRF);
+ }
#endif
/* Don't run the user application if the reset vector is blank (no app loaded) */