Код
static void boot(uint32_t a)
{
__asm volatile (
"LDR SP, [R0]\n"
"LDR PC, [R0, #4]\n"
);
}
{
__asm volatile (
"LDR SP, [R0]\n"
"LDR PC, [R0, #4]\n"
);
}
вызывает сброс в lockup и так по кругу. На следующем старте источник сброса SYSRESET и LOCKUP в RSID.
Посмотреть отладчиком что там происходит крайне затруднительно по причине его тормознутости и глючности (китайский j-link, кое-как с openocd рабоает и вообще никак с фирменной софтиной)
Код
__disable_irq();
__disable_fault_irq();
delay_loop(3000000u);
SCB->VTOR = (start_address & 0x1FFFFF80);
__asm volatile (
"dmb\n"
"dsb\n"
"isb\n"
);
boot(start_address);
__disable_fault_irq();
delay_loop(3000000u);
SCB->VTOR = (start_address & 0x1FFFFF80);
__asm volatile (
"dmb\n"
"dsb\n"
"isb\n"
);
boot(start_address);
Приложение записано с помощью IAP и судя по содержимому памяти записано верно. На LPC1768 помню приходилось перед модификацией PC переключаться на встроенный RC генератор и отключать PLL Тут это тоже пробовал - не помогает, либо я не правильно читаю даташит.
Поделитесь у кого есть реально рабочий код запуска приложения из загрузчика на этом процессоре с gcc.