#ifndef __OTA_FUN_H__
#define __OTA_FUN_H__
#include "mcu_config.h"
#include "core_cm4.h"
typedef __IO uint32_t vu32;
#define u32 uint32
typedef void (*iapfun)(void);
void iap_load_app(u32 appxaddr);
#endif
C 文件
#include "OTA_FUN.h"
#include "MCU_config.h"
uint32_t ad;
iapfun jump2app;
u16 iapbuf[1024];
void WFI_SET(void)
{
__ASM volatile("wfi");
}
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
void iap_load_app(u32 appxaddr)
{
if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000)
{
jump2app=(iapfun)*(vu32*)(appxaddr+4);
MSR_MSP(*(vu32*)appxaddr);
jump2app();
}
}
//void JumpToApp(void)
//{
// /* Check if valid stack address (RAM address) then jump to user application */
// if (((*(__IO uint32_t*)APP_FLASH_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
// {
// __disable_irq();
// /* Jump to user application */
// JumpAddress = *(__IO uint32_t*) (APP_FLASH_ADDRESS + 4);
// Jump_To_Application = (pFunction) JumpAddress;
// /* Initialize user application's Stack Pointer */
// __set_MSP(*(__IO uint32_t*) APP_FLASH_ADDRESS);
// Jump_To_Application();
// }
//}