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

 
 
> Програмирование MicroBlaze с fast interrupt, ISE 14.2
misyachniy
сообщение Oct 24 2012, 18:22
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



XPS Xilinx при синтезе контроллера прерываний для Microblaze предлагает режим быстрых прерываний.
В контроллере прерываний есть регистр(ы) IVAR для хранения векторов прерываний.
Xilinx предоставляет примеры в которых есть функция XIntc_ConnectFastHandler()
В которой происходит запись в эти регистры.
Код
int XIntc_ConnectFastHandler(XIntc *InstancePtr, u8 Id,  XFastInterruptHandler Handler)

XIntc_Out32(InstancePtr->BaseAddress + XIN_IVAR_OFFSET + (Id * 4), (u32) Handler);

Я сгенерил тестовый пример контроля периферии.Но в нем не вызывается эта функция.
В интернете поиск по слову "XIntc_ConnectFastHandler" не дает ни одной ссылки.

Я попробовал врукопашную завести адреса двух функций в регистры IVAR.
Адреса прописываются и считываются.
Разрешение прерывания и быстрый режим тоже.
Но прерывание больше одного раза не вызывается.
Судя по объявлению таблицы прерываний для обычного режима прерываний:
Код
void __interrupt_handler (void) __attribute__ ((interrupt_handler));

void __interrupt_handler(void)
{
    /* The compiler saves all volatiles and the MSR */
    MB_InterruptVectorTable.Handler(MB_InterruptVectorTable.CallBackRef);
    /* The compiler restores all volatiles and MSR, and returns from interrupt */
}

компилятору нужно принудительно указать, что это функция прерывания.
По аналогии с процессорами ARM я попробовал скомпилировать программу с двумя функциями и дополнительными атрибутами.
Код
__attribute__ ((interrupt_handler)) void Int_Timer0 (void)

В результате получаю ошибку:
Цитата
symbol `_interrupt_handler' is already defined

Для такой ошибки на сайте Xilinx есть только решение для ОС Xilkernel. И тоже похоже на обычный вызов прерывания, когда один обработчик опрашивает в контроллере прерывания индекс прерывания и запускает по таблице векторов, хранящейся в оперативной памяти, требуемую функцию.

Если только одну функцию в программе объявляю с указанным атрибутом, то она успешно вызывается многократно.

Как правильно запрограммировать контроллер на быстрые прерывания?
Go to the top of the page
 
+Quote Post



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

 


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


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