* via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application\r
* started via a forced watchdog reset.\r
*/\r
-bool RunBootloader = true;\r
+static bool RunBootloader = true;\r
\r
/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously \r
* runs the bootloader processing routine until instructed to soft-exit.\r
while (!(Endpoint_IsOUTReceived()));\r
\r
/* Read in the write destination address */\r
- uint16_t PageAddress = Endpoint_Read_Word_LE();\r
+ #if (FLASHEND > 0xFFFF)\r
+ uint32_t PageAddress = ((uint32_t)Endpoint_Read_16_LE() << 8);\r
+ #else\r
+ uint16_t PageAddress = Endpoint_Read_16_LE();\r
+ #endif\r
\r
/* Check if the command is a program page command, or a start application command */\r
+ #if (FLASHEND > 0xFFFF)\r
+ if ((uint16_t)(PageAddress >> 8) == COMMAND_STARTAPPLICATION)\r
+ #else\r
if (PageAddress == COMMAND_STARTAPPLICATION)\r
+ #endif\r
{\r
RunBootloader = false;\r
}\r
boot_spm_busy_wait();\r
\r
/* Write each of the FLASH page's bytes in sequence */\r
- for (uint16_t PageByte = 0; PageByte < SPM_PAGESIZE; PageByte += 2) \r
+ for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++) \r
{\r
/* Check if endpoint is empty - if so clear it and wait until ready for next packet */\r
if (!(Endpoint_BytesInEndpoint()))\r
}\r
\r
/* Write the next data word to the FLASH page */\r
- boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE());\r
+ boot_page_fill(PageAddress + ((uint16_t)PageWord << 1), Endpoint_Read_16_LE());\r
}\r
\r
/* Write the filled FLASH page to memory */\r