Tik31 0 13 февраля, 2021 Опубликовано 13 февраля, 2021 · Жалоба Доброго времени суток! Столкнулся со следующей проблемой, в разрешении которой и прошу помощи: Необходимо вести отладку ПО в DDR, т.е. объем eSRAM маловат, а отлаживаться в eNVM не хочется. Проект сконфигурирован так, что MDDR замапан на адреса 0x00000000. Файл программы слинкован соответствующим образом с помощью стандартного скрипта. Перед загрузкой выполняются скрипты инициализации (обнуление регистров, настройка MDDR). Они так же стандартные. Далее программа успешно грузится в DDR и запускается, но не генерируются ни прерывания, ни исключения. Таблицу векторов проверил, она лежит в 0x00000000, все четко. Ссылки на адреса обработчиков корректные. Значение VTOR 0x00000000. Не могу понять в чем проблема. Стоит только замапать в 0x00000000 в eNVM и слинковать в eSRAM так все становиться ок. Если подытожить, то получается, что исключения и прерывания не генерируются при звмапаной в 0x00000000 MDDR PS: Чип M2S150TS, отладка Advanced development kit Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 13 февраля, 2021 Опубликовано 13 февраля, 2021 · Жалоба Помниться, такая трудность была. Она решаема! На данный момент уже давно с этим работа, поэтому подзабыл детали. Как вспомню решение, отпишусь. Для начала попробуйте сделать следующее, если поймете что я имею в виду: 1 Проверить возможность записи в любую ячейку памяти из под отладчика (вероятно это у вас получается, судя по тому что написали выше вы) 2 Проверить положение галочки "eNVM", на сколько я помню, в конфигураторе ядра памяти или вообще самого ядра процессора в Либеро. Возможно это выбор места, откуда должна стартовать программа ядра процессора. Не помню точно. На сколько вспомитается, это можно сделать и из под отладчика. Т.е. установить нужные биты в конфиг регистрах, и вызвать сброс только проц. ядра. 3. Проверить куда смаплена ваша ДДР, и куда смаплен старт, т.е. физически как память была скажем на адресе 0хА0000000, так там и состанется, но этот адрес можно смапить на адрес 0х00000000. Т.е. адреса разные, а физичеки будет доступ к одному и тому же. 4 Проверить, загрузилась ли программа вообще в ДДР. 5 Возможно после всех этих манипуляций, придется загрузить программу в ДДР, и вызвать сброс проц. ядра, без сброса всей микросхемы SM2. 6 Проверить, прыгает ли указатель на адрес куда вам нужно, в итоге, после сброска проц. ядра. Еще были какие-то танцы с бубнами с линкерскриптом. Т.е. пришлось ручками править чего-то в линкере, чтобы все работало как хочется. В автомате он генерирует не корректно. Не судите строго, воспоминания обрывочные. Написал только потому, что в свое время было очень мало информации по SM2. Приходилось много экспериментировать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 15 февраля, 2021 Опубликовано 15 февраля, 2021 · Жалоба Тема еще актуальна? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tik31 0 15 февраля, 2021 Опубликовано 15 февраля, 2021 · Жалоба 10 hours ago, slkhome said: Тема еще актуальна? Спасибо. Решение было следующее: послу загрузки программы в ddr необходимо выполнить в openocd команду soft_reset_halt. После данной процедуры все работает соответствующим образом Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться