BootJump_ARTERY_AT32/Src/BootJump.c

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
}