[Core] Add Reboot keycode to core (#15990)
This commit is contained in:
parent
425c54cf8c
commit
787a68948f
25 changed files with 124 additions and 5 deletions
|
@ -63,3 +63,7 @@ void bootloader_jump(void) {
|
|||
while (1)
|
||||
; // Wait on timeout
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
|
|
@ -31,3 +31,10 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// watchdog reset
|
||||
wdt_enable(WDTO_250MS);
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
|
|
@ -37,3 +37,12 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
while (1) {
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// setup watchdog timeout
|
||||
wdt_enable(WDTO_60MS);
|
||||
|
||||
// wait for watchdog timer to trigger
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,5 +15,14 @@
|
|||
*/
|
||||
|
||||
#include "bootloader.h"
|
||||
#include <avr/wdt.h>
|
||||
|
||||
__attribute__((weak)) void bootloader_jump(void) {}
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// setup watchdog timeout
|
||||
wdt_enable(WDTO_60MS);
|
||||
|
||||
// wait for watchdog timer to trigger
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,8 +34,15 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
UCSR1B = 0;
|
||||
_delay_ms(5); // 5 seems to work fine
|
||||
|
||||
// watchdog reset
|
||||
reset_key = BOOTLOADER_RESET_KEY;
|
||||
// watchdog reset
|
||||
wdt_enable(WDTO_250MS);
|
||||
for (;;)
|
||||
;
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// watchdog reset
|
||||
wdt_enable(WDTO_250MS);
|
||||
for (;;)
|
||||
;
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "bootloader.h"
|
||||
|
||||
#include <avr/interrupt.h>
|
||||
#include <avr/wdt.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
__attribute__((weak)) void bootloader_jump(void) {
|
||||
|
@ -126,3 +127,12 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
asm volatile("jmp 0x1FC00");
|
||||
#endif
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// setup watchdog timeout
|
||||
wdt_enable(WDTO_60MS);
|
||||
|
||||
// wait for watchdog timer to trigger
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,3 +54,12 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
#endif
|
||||
[bootaddrme] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 8) & 0xff), [bootaddrlo] "M"((((FLASH_SIZE - BOOTLOADER_SIZE) >> 1) >> 0) & 0xff));
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// setup watchdog timeout
|
||||
wdt_enable(WDTO_15MS);
|
||||
|
||||
// wait for watchdog timer to trigger
|
||||
while (1) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,3 +19,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
||||
/* give code for your bootloader to come up if needed */
|
||||
void bootloader_jump(void);
|
||||
void mcu_reset(void);
|
||||
|
|
|
@ -16,9 +16,6 @@
|
|||
|
||||
#include <hal.h>
|
||||
|
||||
// Value to place in RTC backup register 10 for persistent bootloader mode
|
||||
#define RTC_BOOTLOADER_FLAG 0x424C
|
||||
|
||||
/**
|
||||
* @brief PAL setup.
|
||||
* @details Digital I/O ports static configuration as defined in @p board.h.
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// Copyright 2022 Nick Brassel (@tzarc)
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
#pragma once
|
||||
|
||||
// Value to place in RTC backup register 10 for persistent bootloader mode
|
||||
#define RTC_BOOTLOADER_FLAG 0x424C
|
||||
|
||||
// Value to place in RTC backup register 10 for instant reboot mode
|
||||
#define RTC_BOOTLOADER_JUST_UPLOADED 0x424D
|
|
@ -17,5 +17,6 @@
|
|||
#include "bootloader.h"
|
||||
|
||||
__attribute__((weak)) void bootloader_jump(void) {}
|
||||
__attribute__((weak)) void mcu_reset(void) {}
|
||||
|
||||
__attribute__((weak)) void enter_bootloader_mode_if_requested(void) {}
|
||||
|
|
|
@ -36,5 +36,12 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
*DBGMCU_CMD = DBGMCU_CMD_RESET;
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
// Confirmed by karlk90, there is no actual reset to bootloader.
|
||||
// This just resets the controller.
|
||||
*DBGMCU_KEY = DBGMCU_KEY_UNLOCK;
|
||||
*DBGMCU_CMD = DBGMCU_CMD_RESET;
|
||||
}
|
||||
|
||||
/* Jumping to bootloader is not possible from user code. */
|
||||
void enter_bootloader_mode_if_requested(void) {}
|
||||
|
|
|
@ -23,3 +23,5 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
wait_ms(100);
|
||||
__BKPT(0);
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {}
|
||||
|
|
|
@ -30,3 +30,4 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
// request reset
|
||||
SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk;
|
||||
}
|
||||
__attribute__((weak)) void mcu_reset(void) {}
|
||||
|
|
|
@ -61,6 +61,9 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// not needed at all, but if anybody attempts to invoke it....
|
||||
void enter_bootloader_mode_if_requested(void) {}
|
||||
|
||||
|
@ -76,6 +79,10 @@ __attribute__((weak)) void bootloader_jump(void) {
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
void enter_bootloader_mode_if_requested(void) {
|
||||
unsigned long *check = MAGIC_ADDR;
|
||||
if (*check == BOOTLOADER_MAGIC) {
|
||||
|
|
|
@ -21,3 +21,8 @@
|
|||
__attribute__((weak)) void bootloader_jump(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
BKP->DR10 = RTC_BOOTLOADER_JUST_UPLOADED;
|
||||
NVIC_SystemReset();
|
||||
}
|
|
@ -25,6 +25,10 @@
|
|||
extern uint32_t _board_dfu_dbl_tap[];
|
||||
#define DBL_TAP_REG _board_dfu_dbl_tap[0]
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
__attribute__((weak)) void bootloader_jump(void) {
|
||||
DBL_TAP_REG = DBL_TAP_MAGIC;
|
||||
NVIC_SystemReset();
|
||||
|
|
|
@ -47,3 +47,7 @@ void enter_bootloader_mode_if_requested(void) {
|
|||
;
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((weak)) void mcu_reset(void) {
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
|
|
@ -17,3 +17,4 @@
|
|||
#include "bootloader.h"
|
||||
|
||||
void bootloader_jump(void) {}
|
||||
void mcu_reset(void) {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue