Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Неконтролируемые вызовы обработчика прерывания
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Человек-Сауна
Добрый день, вопрос в следующем:
Плата Altera Stratix II 2S180.
Допустим, есть кастомное устройство, предназначенное для работы в конфигурации с процессором и стандартной шиной, реализовано аппаратное прерывание по отработке устройства. В софте реализована функция, которая будет использоваться как обработчик. Есть определенный регистр прерывания, один из флагов в котором поднимается, когда нужно поймать и обработать прерывание; есть флаг, который нужно поднять чтобы сбросить прерывание.
Проблема вот в чем: Сразу после окончания регистрации обработчика прерывания начинается его постоянный вызов, причем вызов происходит настолько часто и лавинно, что даже вроде бы управление main()-у не отдается ни на такт. При этом значение на регистре прерывания - 0, то есть обработчик вызываться не должен. Изменение значения на регистре ни на что не влияет.
Вопросы:
1)Чем определяется, когда именно вызовется функция обработки прерывания? Значением какого бита или флага, или регистра? Регулируется ли это со стороны софта? Например, для стандартного устройства - ButtonPio - в файле system.h настраивается, будет прерывание срабатывать по фронту или по уровню пинов кнопок.
2)Почему вообще может быть такой лавинный вызов обработчика? Устройство кастомное, но код файлов *.v не документирован и понять принцип его работы сложно.

Спасибо!
artix
Цитата(Человек-Сауна @ Nov 16 2012, 14:03) *
Добрый день, вопрос в следующем:
Плата Altera Stratix II 2S180.
Допустим, есть кастомное устройство, предназначенное для работы в конфигурации с процессором и стандартной шиной, реализовано аппаратное прерывание по отработке устройства. В софте реализована функция, которая будет использоваться как обработчик. Есть определенный регистр прерывания, один из флагов в котором поднимается, когда нужно поймать и обработать прерывание; есть флаг, который нужно поднять чтобы сбросить прерывание.
Проблема вот в чем: Сразу после окончания регистрации обработчика прерывания начинается его постоянный вызов, причем вызов происходит настолько часто и лавинно, что даже вроде бы управление main()-у не отдается ни на такт. При этом значение на регистре прерывания - 0, то есть обработчик вызываться не должен. Изменение значения на регистре ни на что не влияет.
Вопросы:
1)Чем определяется, когда именно вызовется функция обработки прерывания? Значением какого бита или флага, или регистра? Регулируется ли это со стороны софта? Например, для стандартного устройства - ButtonPio - в файле system.h настраивается, будет прерывание срабатывать по фронту или по уровню пинов кнопок.
2)Почему вообще может быть такой лавинный вызов обработчика? Устройство кастомное, но код файлов *.v не документирован и понять принцип его работы сложно.

Спасибо!

Кажись немного веткой промахнулись. Вам в системы на ПЛИС laughing.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.