forked from gary/BCU
2
0
Fork 0
BCU/app/stm32fxxx_boot/drivers/drv_flash.c

40 lines
1.0 KiB
C

#include "drv_clk.h"
#include "drv_flash.h"
#include "stm32f4xx.h"
void flashJump(uint32_t dest_addr, NoArgCall call)
{
//#if (STM32F10X_CL | STM32F10X_MD | STM32F10X_HD)
if (((*(__IO uint32_t*)dest_addr) & 0x2FFE0000 ) == 0x20000000)
{
__disable_irq();
call();
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
__set_MSP(*(__IO uint32_t*) dest_addr);
//SCB->VTOR = dest_addr;
((NoArgCall) (*(__IO uint32_t*)(dest_addr + 4)))();
}
//#endif
}
void flashJumpNew(uint32_t dest_addr, NoArgCall call)
{
uint32_t sp_addr = *(__IO uint32_t*)dest_addr;
uint32_t app_addr = *(__IO uint32_t*)(dest_addr + 4);
if ((sp_addr != 0xFFFFFFFF)
&& (app_addr != 0xFFFFFFFF)
&& ((sp_addr & 0xF0000000) == 0x20000000)
&& ((app_addr & 0x0F000000) == 0x08000000))
{
__disable_irq();
call();
SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
__set_MSP(*(__IO uint32_t*) dest_addr);
((NoArgCall) (*(__IO uint32_t*)(dest_addr + 4)))();
}
}