У меня есть плата для разработки Everest PolarFire Microsemi RiscV. У меня есть загрузчик и я хочу загрузить основное приложение, которое я хочу выполнить из DDR. Я скопировал всю программу в местоположение 0x80010000 и подтвердил, что могу видеть местоположение ddr, если я прочитал это местоположение и выполнил cr c в коде, который я скопировал. Но когда я пытаюсь загрузить его, я просто зависаю, когда пытаюсь вызвать приведенный ниже код.
Я делаю следующее после того, как скопировал код в правильное место в ddr:
__disable_irq();
PLIC_init();
/* Disable all interrupts: */
write_csr(mie, 0);
/* Start executing from the top of DDR memory: */
__asm volatile("lui ra,0x80010");
__asm volatile("ret");
Я нашел это в https://github.com/RISCV-on-Microsemi-FPGA/SoftConsole/blob/master/riscv-simple-baremetal-bootloader/bootloader.c.
Я не понимаю, почему не вижу распечатки моего серийного номера после загрузки кода, который я поместил в загрузчик. Я в основном перекомпилировал программу загрузчика для 0x80010000, которая является местоположением ddr в дизайне Libero. Я сделал это, изменив скрипт компоновщика так, чтобы он указывал на 0x80010000.
Любая помощь будет принята с благодарностью.