Добрый день! Столкнулся с такой проблемой: пишу загрузчик для LPC3131. загрузчик копирует из NAND в SDRAM прошивку и должен её запустить. Процесс копирования проходит нормально, прошивка находится, копируется, по адресам в SDRAM куда нужно было копировать появляются валидные данные. НО, вопрос в том как теперь передать управление этой, записанной в SDRAM, прошивке?

пробовал такие методы:
Код
вариант 1.
void (*run)(void)=(void (*)(void))( DOWNLOAD_ADDRESS );
run();
вариант 2.
__asm volatile ("mov pc, %0" :: "r" ( DOWNLOAD_ADDRESS ) );
где DOWNLOAD_ADDRESS объявлялся и как 0x30008000 (адрес куда по умолчанию копируется ядро linux), и 0x30000000 (просто начало SDRAM), и DOWNLOAD_ADDRESS+0x80 для обоих случаев/адресов.
соответственно прошивка также грузится по этому адресу DOWNLOAD_ADDRESS.
прошивка *.bin в формате для LPC313x
используется gnu toolchain Sourcery G++ Lite для ARM
кроме этого, пробовал грузить apex и в нем делать переход по тем же адресам - результат такой же - нулевой

Очевидно, что делаю все не так. Не подскажите, как правильно загрузить прошивку из NAND и запустить её?
Встроенный загрузчик не подходит, потому что это все делается для того, чтобы в будущем грузить образ WinCE из NAND, но это уже другая история, разобраться бы для начала как прошивку из примеров таким образом загрузить/запустить.
Заранее благодарен за любую помощь!