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

 
 
 
Reply to this topicStart new topic
> Неконтролируемые вызовы обработчика прерывания
Человек-Сауна
сообщение Nov 16 2012, 11:03
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 16-11-12
Пользователь №: 74 417



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

Спасибо!
Go to the top of the page
 
+Quote Post
artix
сообщение Nov 16 2012, 12:29
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 136
Регистрация: 19-10-10
Из: Киев
Пользователь №: 60 262



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

Спасибо!

Кажись немного веткой промахнулись. Вам в системы на ПЛИС laughing.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:15
Рейтинг@Mail.ru


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