Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вложенные прерывания на Microblaze
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
DenisKuzovin
Добрый день!

Не могу разобраться с одной проблемой. Есть у меня проект с Микроблейзом и контроллером прерываний (axi_intc 1.04.a). Так как используется ISE 14.7, то и версия контроллера прерывания соответствующая.

Хочу сделать многопоточную систему в процессоре. Есть несколько потоков, более высокоприоритетные могут прерывать более низкоприоритетные. Потоки создаются с помощью таймеров и прерываний. Соответственно необходимо, чтобы более высокоприоритетное прерывание прерывало текущее более низкоприоритетное прерывание, а не просто становилось в очередь.

Судя по всему, ближайшая реализация этого Xilinx появилась лишь в версии 4 axi_intc, доступной для Vivado, что нам не очень подходит..

Ткните носом, пожалуйста, может кто сталкивался с подобной проблемой, может кто видел реализацию вложенных прерываний на Microblaze в ISE 14.7?
Golikov A.
у микроблайза 1 сигнал прерывание и все, а дальше идет разбор что за прерывание. Как я понимаю без своего внешнего контроллера ничего вложенного само не получится.
DenisKuzovin
В прошлый раз забил на это (обошел другими методами), а сейчас снова появилась необходимость организовать вложенные прерывания.

В самом Микроблейзе тоглько один вход прерывания. К микроблейзу подключен внешний контроллер прерываний AXI_INTC v1.04a. Поддержки вложенных прерываний в нем нет. Из-за того, что проект работает в Virtex 6 - разработка в новых версиях Vivado невозможна, поэтому все так же используется ISE 14.7

Никакой документации или предложений от Xilinx я найти не смог. Говорят, что в принципе это возможно, но и ничего конкретного не предлагают.

Поддержка вложенных прерываний появилась в AXI_INTC v4.1, но он только для Vivado.

Пытаюсь понять, можно ли как-то собрать новую корку в ISE, чтобы получить поддержку вложенных прерываний в микроблейз на Virtex 6
dm.pogrebnoy
Куда уж конкретнее.
Посидеть, конечно, придется, но в целом ничего невозможного нет.
DenisKuzovin
Ну да, к своему основному хендлеру прерываний я уже пришел. Пока работаю на корке версии 1.04а. Основное отличие от версии 4.1, которое я смог заметить, это добавление нового регистра в новой версии корки. При записи в этот регистр номера прерывания блокируются все прерывания более низкого приоритета.

Что я хочу сделать:
Написать свой хендлер для прерывания в котором бы эмулировался этот регистр и вручную запрещались все прерывания с более низким приоритетом. При этом нужно сохранить какие-то регистры самого процессора, перед тем, как разрешать снова прерывания.

https://forums.xilinx.com/t5/Embedded-Proce...ater/td-p/12121

вот тут подобное обсуждение велось. Ответ, конечно, порадовал. нужно сохранить r14 (програм каунтер) и, может быть, что-то еще. Но вот что еще - там не пишут...

Попробую пока без "чего-то еще", посмотрим, что получится.
DenisKuzovin
По всей видимости, проблема решилась и без особых трудозатрат.

Взял стандартный хендлер прерываний из BSP, который генерирует Vivado 2015.4. В этом хендлере есть работа с регистром ILR, который появился в AXI_INTC v4.1. Через него и организованы вложенные прерывания в новой версии контроллера прерываний. Работу данного регистра можно эмулировать программными средствами, вручную запрещая прерывания уровнями ниже или равным текущему в регистре IER. Кроме этого стандартный хендлер в каждом своём вызове сохраняет регистр r14 и восстанавливает его значение после своей работы.

Немного преобразовав работу стандартного хендлера, как написано выше, я получил нормальную работу вложенных прерываний в микроблейзе в ISE 14.7 на Virtex6.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.