X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/17158b359f8189c39448c96c4746d8738d5fe336..df366e055d7c3831bd40d96efe3a91cdeb31e2dd:/Bootloaders/Printer/BootloaderPrinter.c diff --git a/Bootloaders/Printer/BootloaderPrinter.c b/Bootloaders/Printer/BootloaderPrinter.c index a19cb0674..716a23a1f 100644 --- a/Bootloaders/Printer/BootloaderPrinter.c +++ b/Bootloaders/Printer/BootloaderPrinter.c @@ -119,9 +119,49 @@ uint16_t MagicBootKey ATTR_NO_INIT; */ void Application_Jump_Check(void) { + bool JumpToApplication = false; + + #if (BOARD == BOARD_LEONARDO) + /* Enable pull-up on the IO13 pin so we can use it to select the mode */ + PORTC |= (1 << 7); + Delay_MS(10); + + /* If IO13 is not jumpered to ground, start the user application instead */ + JumpToApplication |= ((PINC & (1 << 7)) != 0); + + /* Disable pull-up after the check has completed */ + PORTC &= ~(1 << 7); + #elif ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) + /* Disable JTAG debugging */ + JTAG_DISABLE(); + + /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ + PORTF |= (1 << 4); + Delay_MS(10); + + /* If the TCK pin is not jumpered to ground, start the user application instead */ + JumpToApplication |= ((PINF & (1 << 4)) != 0); + + /* Re-enable JTAG debugging */ + JTAG_ENABLE(); + #endif + /* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) + JumpToApplication |= true; + + /* Don't run the user application if the reset vector is blank (no app loaded) */ + if (pgm_read_word_near(0) == 0xFFFF) + JumpToApplication = false; + + /* If a request has been made to jump to the user application, honor it */ + if (JumpToApplication) { + /* Turn off the watchdog */ + MCUSR &= ~(1<