tao_z
2022-05-25 1044ba0d2286698d0da28112bffc0f114bef2134
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "fbl_ap.h"
#include "fbl_def.h"
#include "xl_nvic.h"
#include <string.h>
__IO uint8_t ProgramRequest[8] __attribute__((section(".noinit_bootReqFlag_ram")));
__IO uint32_t VectorTable[99] __attribute__((section(".RAMVectorTable")));
 
void FblSetFblProgramRequestFlag(void)
{
    ProgramRequest[0] = kProgramRequestByte0;
    ProgramRequest[1] = kProgramRequestByte1;
    ProgramRequest[2] = kProgramRequestByte2;
    ProgramRequest[3] = kProgramRequestByte3;
    ProgramRequest[4] = kProgramRequestByte4;
    ProgramRequest[5] = kProgramRequestByte5;
    ProgramRequest[6] = kProgramRequestByte6;
    ProgramRequest[7] = kProgramRequestByte7;
}
uint8_t FblChkFblProgramRequestFlag(void)
{
    return (((ProgramRequest[0] == kProgramRequestByte0) && (ProgramRequest[1] == kProgramRequestByte1) && (ProgramRequest[2] == kProgramRequestByte2) && (ProgramRequest[3] == kProgramRequestByte3) && (ProgramRequest[4] == kProgramRequestByte4) && (ProgramRequest[5] == kProgramRequestByte5) && (ProgramRequest[6] == kProgramRequestByte6) && (ProgramRequest[7] == kProgramRequestByte7)) ? 1u : 0u);
}
 
void FblClrFblProgramRequestFlag(void)
{
    uint8_t byteIndex;
    for (byteIndex = 0; byteIndex < 8; byteIndex++)
    {
        ProgramRequest[byteIndex] = 0x00u;
    }
}
 
static void Ostick_ReInit(void)
{
    SysTick->CTRL &= ~SysTick_CTRL_TICKINT_Msk; //¹Ø±ÕSYSTICKÖжÏ
    SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;  //¹Ø±ÕSYSTICK
}
 
extern void AP_StartApp(void)
{
    void (*pAppFun)(void);
    uint32_t JumpAddr;
    JumpAddr = (void (*)(void))(*((uint32_t *)((APPLSTART_OFFSET + (uint32_t)4))));
    pAppFun = (void (*)(void))JumpAddr;
 
    __set_MSP(*(__IO uint32_t *)APPLSTART_OFFSET);
    /* Copy application vector table to RAM */
    (void)memcpy((void *)VectorTable, (void *)APPLSTART_OFFSET, sizeof(VectorTable));
 
    __asm volatile("cpsid i"); // disable all interrupt
    Ostick_ReInit();
    /* Relocate vector table in SRAM at the adress 0x20000000 */
    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0); // set vector table at start of ram      ((uint32_t)0x20000000)
 
    (*pAppFun)(); // jump
}