MEMORY
{
  /* Define each memory region */
  MFlash24 (rx) : ORIGIN = 0x1000, LENGTH = 0x5000 /* 20K bytes */
  RamLoc8 (rwx) : ORIGIN = 0x10000000, LENGTH = 0x1FE0 /* 8K bytes */
}
  /* Define a symbol for the top of each memory region */
  __top_MFlash24 = 0x1000 + 0x5000;
  __top_RamLoc8 = 0x10000000 + 0x1FE0;  | 
 
int main(void)
{
    LPC_IOCON->PIO2_9 &= ~0x1F;         // PIO2_9, NO PULLUP/PULLDOW
    LPC_GPIO2->DIR |= (0x1 << 9);       // 1 - OUTPUT
    SysTick_Config(SystemCoreClock / 100000000UL);
    while(1);
    return 0 ;
}
void SysTick_Handler(void)
{
    if (u8LedOn)
    {
        (LPC_GPIO2->MASKED_ACCESS[(1 << 9)] = ((1) << 9));    }
    else
    {
        (LPC_GPIO2->MASKED_ACCESS[(1 << 9)] = ((0) << 9));
    }
    u8LedOn = !u8LedOn;
}   | 
 
                /* Load main stack pointer with application stack pointer initial value,
   stored at first location of application area */
                asm volatile("ldr r0, =0x1000");
asm volatile("ldr r0, [r0]");
asm volatile("mov sp, r0");
/* Load program counter with application reset vector address, located at
   second word of application area. */
asm volatile("ldr r0, =0x1004");
asm volatile("ldr r0, [r0]");
asm volatile("mov pc, r0");  | 
 
static uint32_t u32BootLoader_ProgramFlash(uint8_t *pu8Data, uint16_t u16Len)
{
uint32_t u32Result = 0;
static uint32_t u32NextFlashWriteAddr = APP_START_ADDR;
if ((pu8Data != 0) && (u16Len != 0))
{
/* Prepare the flash application sectors for reprogramming */
if (u32IAP_PrepareSectors(APP_START_SECTOR, APP_END_SECTOR) == IAP_STA_CMD_SUCCESS)
{
/* Ensure that amount of data written to flash is at minimum the
   size of a flash page */
if (u16Len < IAP_FLASH_PAGE_SIZE_BYTES)
{
u16Len = IAP_FLASH_PAGE_SIZE_BYTES;
}
/* Write the data to flash */
if (u32IAP_CopyRAMToFlash(u32NextFlashWriteAddr, (uint32_t)pu8Data, u16Len) == IAP_STA_CMD_SUCCESS)
{
/* Check that the write was successful */
if (u32IAP_Compare(u32NextFlashWriteAddr, (uint32_t)pu8Data, u16Len, 0) == IAP_STA_CMD_SUCCESS)
{
/* Write was successful */
u32NextFlashWriteAddr += u16Len;
u32Result = 1;
}
}
}
}
return (u32Result);
}
  | 
 
[color=#f00]//slow jump: switch main clock to IRC
LPC_SYSCON->MAINCLKSEL  = 0;
LPC_SYSCON->MAINCLKUEN  = 0;
LPC_SYSCON->MAINCLKUEN  = 1;
[/color]/* Valid application located in the next sector(s) of flash so execute */
/* Load main stack pointer with application stack pointer initial value, stored at first location of application area */
asm volatile("ldr r0, =0x1000");
asm volatile("ldr r0, [r0]");
asm volatile("mov sp, r0");
/* Load program counter with application reset vector address, located at second word of application area. */
asm volatile("ldr r0, =0x1004");
asm volatile("ldr r0, [r0]");
asm volatile("mov pc, r0");
  | 
 SysTick_Config(SystemCoreClock / 10);  | 
 /* Setup SysTick Timer for 1 second interrupt */ SysTick_Config(SystemCoreClock / 100000000UL);  |