48 lines
1.0 KiB
C
Executable File
48 lines
1.0 KiB
C
Executable File
//
|
|
// Created by xemon on 02.11.22.
|
|
//
|
|
#include CMSIS_device_header
|
|
|
|
typedef void (*pFunction)(void);
|
|
|
|
void BootJumpToAddress(const uint32_t address) {
|
|
|
|
uint32_t appStack;
|
|
pFunction appEntry;
|
|
|
|
// get the application stack pointer (1st entry in the app vector table)
|
|
appStack = (uint32_t) *((__IO
|
|
uint32_t *) address);
|
|
|
|
// Get the app entry point (2nd entry in the app vector table
|
|
appEntry = (pFunction) *(__IO
|
|
uint32_t *) (address + 4);
|
|
|
|
// HAL_RCC_DeInit();
|
|
// HAL_DeInit();
|
|
|
|
SysTick->CTRL = 0;
|
|
SysTick->LOAD = 0;
|
|
SysTick->VAL = 0;
|
|
uint32_t i = SCB->VTOR;
|
|
i++;
|
|
|
|
// Reconfigure vector table offset to match the app location
|
|
//#if (SET_VECTOR_TABLE)
|
|
// SCB->VTOR = address;
|
|
//#endif
|
|
//
|
|
//// __disable_irq(); // disable interrupt
|
|
//// __enable_irq();
|
|
//// __set_PRIMASK(1);
|
|
//// __set_MSP(appStack); // Set app stack pointer
|
|
|
|
__disable_irq();
|
|
__set_MSP(appStack);
|
|
SCB->VTOR = address;
|
|
__enable_irq();
|
|
|
|
appEntry(); // Start the app
|
|
|
|
while (1); // never reached
|
|
} |