реклама на сайте
подробности

 
 
> Контроллер прерываний в Microblaze-системе - XST_DEVICE_IS_STARTED
Andrey Pesoshin
сообщение Nov 9 2011, 18:19
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 51
Регистрация: 5-07-10
Пользователь №: 58 297



Проект для 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 нельзя безболезненно использовать, если хранить объект где-то кроме стека?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lecovich
сообщение Dec 1 2011, 11:34
Сообщение #2





Группа: Участник
Сообщений: 9
Регистрация: 13-04-10
Пользователь №: 56 614



Доброго времени суток! Присоединюсь к топику со своим вопросом.

Необходимо загружать аппаратную конфигурацию 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. Может кто-нибудь сможет пролить мне свет на эту тайну? Заранее спасибо!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th August 2025 - 04:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016