void jumpToMainProgramm(uint32_t startJumpAddress) { SCB_InvalidateDCache(); SCB_InvalidateICache(); SysTick->CTRL = 0; SysTick->LOAD = 0; SysTick->VAL = 0; for(uint8_t i = 0; i < 8; i++) { NVIC->ICER[i]=0xFFFFFFFF; NVIC->ICPR[i]=0xFFFFFFFF; } SCB->ICSR |= SCB_ICSR_PENDSTCLR_Msk; SCB->SHCSR &= ~(SCB_SHCSR_USGFAULTENA_Msk | // SCB_SHCSR_BUSFAULTENA_Msk | // SCB_SHCSR_MEMFAULTENA_Msk); JumpToApplication = (pFunction) (*(__IO uint32_t*)(startToProgramAddress + 4)); #if 1 //DEBUG_PROGRAMM_SEQUENCE PrintfDbg("JUMP: %p 0x%x\n\r", JumpToApplication, *(__IO uint32_t*)(startToProgramAddress + 4)); #endif //DEBUG_PROGRAMM_SEQUENCE __disable_irq(); #define VECT_TAB_BASE_ADDRESS D1_AXISRAM_BASE SCB->VTOR = VECT_TAB_BASE_ADDRESS | VECT_TAB_OFFSET; HAL_RCC_DeInit(); // deinit clocks __set_MSP(*(__IO uint32_t*)startToProgramAddress); __set_PSP(*(__IO uint32_t*)startToProgramAddress); __set_CONTROL(0); __set_PRIMASK(1); JumpToApplication(); }