#if USE_EXTARNAL_BOOTLOADER    // Initialize and copy Vector Table
    {
        extern UINT32 ARM_Vectors_Start;
        extern UINT32 ARM_Vectors_End;
        volatile struct AT91_MATRIX *pm;
        pm = (volatile struct AT91_MATRIX *) AT91C_BASE_MATRIX;

        UINT32* src = (UINT32*) &ARM_Vectors_Start;
#if USE_SRAM1_FOR_REMAP
        UINT32* dst = (UINT32*) SRAM1_MEMORY_Base; // 0x00200000
#else
        UINT32* dst = (UINT32*) SRAM_MEMORY_Base;  // 0x00300000
#endif
        UINT32  len = (UINT32)((&ARM_Vectors_End - &ARM_Vectors_Start - 1) * 4);

        Prepare_Copy( src + 1, dst, len );

        CPU_FlushCaches();
        CPU_InvalidateCaches();
        CPU_DisableCaches();

        //
        // now remap the loaded vector table
        //
        pm->MATRIX_MRCR = (AT91C_MATRIX_RCA926D|AT91C_MATRIX_RCA926I);
        //

        // Recopy To Rewrite through cache
        Prepare_Copy( src + 1, 0, len );

        CPU_EnableCaches();
    }
#endif
