Use NMI as NMI and call this function. Button bounce will probably be a problem.
/* Function Pointer returning void, past void pointer: */
void (*_boot_loader_start)( void * arg );
void boot_loader_start( void )
{
/* Read the function address from the ROM API tree: */
uint32_t const _boot_loader_start_address = **(uint32_t **)(0x1C00001CUL);
/* Turn address in to a funciton pointer: */
_boot_loader_start = (void (*)(void * arg))_boot_loader_start_address;
_boot_loader_start( NULL ); /* Call the function. Will not return from here */
}
It is also possible to set up FCFG to always run the bootloader at reset which may or may not be what you really want to do.