mirror of
https://github.com/zsa/qmk_firmware.git
synced 2026-03-26 19:59:06 +00:00
fix(moonlander-revb) fix soft reset to bootloader
This commit is contained in:
@@ -469,3 +469,34 @@ void eeconfig_init_kb(void) { // EEPROM is getting reset!
|
||||
eeconfig_update_kb(keyboard_config.raw);
|
||||
eeconfig_init_user();
|
||||
}
|
||||
|
||||
#ifdef BOOTLOADER_CUSTOM
|
||||
#define APP_ADDRESS 0x08002000
|
||||
__attribute__((weak)) void bootloader_jump(void) {
|
||||
// The ignition bootloader is checking for a high signal on A8 for 100ms when powering on the board.
|
||||
// Setting both A8 and A9 high will charge the capacitor quickly.
|
||||
// Setting A9 low before reset will cause the capacitor to discharge
|
||||
// thus making the bootloder unlikely to trigger twice between power cycles.
|
||||
setPinOutputPushPull(A9);
|
||||
setPinOutputPushPull(A8);
|
||||
writePinHigh(A9);
|
||||
writePinHigh(A8);
|
||||
wait_ms(500);
|
||||
writePinLow(A9);
|
||||
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// When resetting the MCU, we want to jump to the application.
|
||||
SCB->AIRCR = APP_ADDRESS & 0xFFFF;
|
||||
|
||||
// Set the stack pointer to the applications stack pointer
|
||||
__asm__ volatile("msr msp, %0" ::"g"(*(volatile uint32_t *)APP_ADDRESS));
|
||||
|
||||
// Jump to the application
|
||||
(*(void (**)())(APP_ADDRESS + 4))();
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user