Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроллер прерываний в Microblaze-системе - XST_DEVICE_IS_STARTED
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Andrey Pesoshin
Проект для Microblaze, к шине PLB подключен контроллер прерываний - XIntc. Код приложения - на C++, BSP - standalone.
Не могу понять, чем вызвано следующее поведение:

РАБОТАЕТ:
1. В коде main.cpp создаю объект XIntc, делаю XIntc_Initialize, затем XIntc_Start(XIN_REAL_MODE).
Обе операции отрабатывают со статусом XST_SUCCESS.
2. Кнопкой делаю сброс системы. В начале кода main.cpp сделан хак, описанный в http://www.xilinx.com/support/answers/30878.htm по способу 2.
Вместе с хаком обе операции из п.1 отрабатывают с XST_SUCCESS.

НЕ РАБОТАЕТ:
1. Рефакторю код - выношу XIntc как член нового класса Application (application.h/application.cpp).
2. Добавляю операции из п.1 "РАБОТАЕТ" в файл application.cpp. При выполнении - XIntc_Initialize (или XIntc_Start) первый раз выполняются нормально, а после сброса - падают со статусом XST_DEVICE_IS_STARTED.
3. Добавление хака из п.2 "РАБОТАЕТ" - не влияет на поведение предыдущего пункта.

В чем проблема? XIntc нельзя безболезненно использовать, если хранить объект где-то кроме стека?
Andrey Pesoshin
никто не сталкивался? sad.gif
lecovich
Доброго времени суток! Присоединюсь к топику со своим вопросом.

Необходимо загружать аппаратную конфигурацию SoC и программный код для MicroBlaze по включению питания из флешек отладочной платы. Пытаюсь выкинуть вот такой финт ушами:
1) system.bit + system_bm.bmm + bootloader.elf прогоняются через data2mem и помещаются в BPI Flash, откуда благополучно загружаются по включению питания
2) bootloader помещает данные + код из SPI Flash в DDR2 RAM, причем работа с SPI сделана не в interrupt, а в polled-mode
3) после помещения данных и кода в DDR2 RAM устанавливаю PC на адрес начала DDR2 RAM

Все это извращение сделано по тому, что размер target-бинарника превышает размер брама, здесь же по полной задействована работа со всевозможным оборудованием, и, соответственно, прерывания необходимы как воздух.

В общем-то этот "финт ушами" работает в части "помигать диодиком - выплюнуть в терминал". А вот злободневный контроллер прерываний - работает только по включению питания, в остальных же случаях, при перезапуске, отказывается запускаться, ссылаясь на XST_DEVICE_SI STARTED. Может кто-нибудь сможет пролить мне свет на эту тайну? Заранее спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.