diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2017-10-01 16:25:36 +1100 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2017-10-01 16:25:36 +1100 |
commit | 06f53eed83b4ad639698aeb9bcc1a3702e2ac7c4 (patch) | |
tree | 9fb860d93b67d36eed9de55bdd691581d5389960 /Bootloaders/MassStorage | |
parent | 544c4dc9e18d56768be11dd16e3cad693e7cff46 (diff) | |
download | lufa-06f53eed83b4ad639698aeb9bcc1a3702e2ac7c4.tar.gz lufa-06f53eed83b4ad639698aeb9bcc1a3702e2ac7c4.tar.bz2 lufa-06f53eed83b4ad639698aeb9bcc1a3702e2ac7c4.zip |
Fixed bootloaders not disabling global interrupts during erase and write operations (thanks to Zoltan).
Diffstat (limited to 'Bootloaders/MassStorage')
-rw-r--r-- | Bootloaders/MassStorage/BootloaderAPI.c | 24 | ||||
-rw-r--r-- | Bootloaders/MassStorage/BootloaderAPI.h | 1 | ||||
-rw-r--r-- | Bootloaders/MassStorage/BootloaderMassStorage.c | 2 | ||||
-rw-r--r-- | Bootloaders/MassStorage/BootloaderMassStorage.h | 1 |
4 files changed, 19 insertions, 9 deletions
diff --git a/Bootloaders/MassStorage/BootloaderAPI.c b/Bootloaders/MassStorage/BootloaderAPI.c index 491c506d0..5198ea7f0 100644 --- a/Bootloaders/MassStorage/BootloaderAPI.c +++ b/Bootloaders/MassStorage/BootloaderAPI.c @@ -37,16 +37,22 @@ void BootloaderAPI_ErasePage(const uint32_t Address) { - boot_page_erase_safe(Address); - boot_spm_busy_wait(); - boot_rww_enable(); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + boot_page_erase_safe(Address); + boot_spm_busy_wait(); + boot_rww_enable(); + } } void BootloaderAPI_WritePage(const uint32_t Address) { - boot_page_write_safe(Address); - boot_spm_busy_wait(); - boot_rww_enable(); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + boot_page_write_safe(Address); + boot_spm_busy_wait(); + boot_rww_enable(); + } } void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) @@ -71,6 +77,8 @@ uint8_t BootloaderAPI_ReadLock(void) void BootloaderAPI_WriteLock(const uint8_t LockBits) { - boot_lock_bits_set_safe(LockBits); + ATOMIC_BLOCK(ATOMIC_RESTORESTATE) + { + boot_lock_bits_set_safe(LockBits); + } } - diff --git a/Bootloaders/MassStorage/BootloaderAPI.h b/Bootloaders/MassStorage/BootloaderAPI.h index 4889b4c0d..2ae9009bb 100644 --- a/Bootloaders/MassStorage/BootloaderAPI.h +++ b/Bootloaders/MassStorage/BootloaderAPI.h @@ -39,6 +39,7 @@ /* Includes: */ #include <avr/io.h> #include <avr/boot.h> + #include <util/atomic.h> #include <stdbool.h> #include <LUFA/Common/Common.h> diff --git a/Bootloaders/MassStorage/BootloaderMassStorage.c b/Bootloaders/MassStorage/BootloaderMassStorage.c index 6c9697b66..04f7c1af1 100644 --- a/Bootloaders/MassStorage/BootloaderMassStorage.c +++ b/Bootloaders/MassStorage/BootloaderMassStorage.c @@ -114,7 +114,7 @@ void Application_Jump_Check(void) JTAG_ENABLE(); #else /* Check if the device's BOOTRST fuse is set */ - if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) + if (BootloaderAPI_ReadFuse(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST) { /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */ if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY)) diff --git a/Bootloaders/MassStorage/BootloaderMassStorage.h b/Bootloaders/MassStorage/BootloaderMassStorage.h index c9ddee4d7..872296d0f 100644 --- a/Bootloaders/MassStorage/BootloaderMassStorage.h +++ b/Bootloaders/MassStorage/BootloaderMassStorage.h @@ -44,6 +44,7 @@ #include <string.h> #include "Descriptors.h" + #include "BootloaderAPI.h" #include "Config/AppConfig.h" #include "Lib/SCSI.h" |