Зря я сказал, что забыл записать "1111" в контрольный регистр ММУ. (не забывал). _write_MMU_control() возврат к коду выполняется в одну ассемблер инструкцию + одна на сдвиг PC в конвейер должно померещатся (в дизасемблере по крайней мере так). Пробовал и так и так все равно вываливается сразу сразу после MCR2 PC менял . PC просто не меняется и через несколько шагов вываливается код в аборт. Конечно SP для каждого режима настраиваются под ремапированные адреса в стартапе программы на которую мы переходим PC.
Решил не маяться больше с этим, сделал копию программы по адресам после ремапинга.. - все заработало. Собственно программа нормально перешла по адресу где лежит следующая программа, которую я пытался запустить. Я её соответственно сдвинул.
Кстати в примерах ИАР нашел комент, что после вклчючения ММУ следующие две инструкции должны быть NOP. Получается что он не всегда включается сразу после записи данных в контрольный регистр ММУ.
Спасибо за советы!
|