
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();
}