Wait until PDI NVM erase completes in the AVRISPMkii clone programmer.
[pub/USBasp.git] / Bootloaders / HID / BootloaderHID.c
index ec094b1..58c9b3b 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2016.
+     Copyright (C) Dean Camera, 2017.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2016  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2017  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -164,8 +164,11 @@ void EVENT_USB_Device_ControlRequest(void)
                        else if (PageAddress < BOOT_START_ADDR)
                        {
                                /* Erase the given FLASH page, ready to be programmed */
-                               boot_page_erase(PageAddress);
-                               boot_spm_busy_wait();
+                               ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+                               {
+                                       boot_page_erase(PageAddress);
+                                       boot_spm_busy_wait();
+                               }
 
                                /* Write each of the FLASH page's bytes in sequence */
                                for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++)
@@ -182,8 +185,11 @@ void EVENT_USB_Device_ControlRequest(void)
                                }
 
                                /* Write the filled FLASH page to memory */
-                               boot_page_write(PageAddress);
-                               boot_spm_busy_wait();
+                               ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
+                               {
+                                       boot_page_write(PageAddress);
+                                       boot_spm_busy_wait();
+                               }
 
                                /* Re-enable RWW section */
                                boot_rww_enable();