Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с прерыванием
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
alexPec
Добрый день всем. Такая проблема. Есть СОПЦ, в нем прерывание (не VIC) возникает при приеме пакета (пакет передается по ДМА, не эзернет, ДМА стрим то мемори). Прерывание возникает именно по ДМА, когда дескриптор чейн обработан, т.е. принято заданное количество байт, в конце обработчика этот же дескриптор чейн запускается снова и ожидается прерывание. Пакеты формируются демодулятором сигнала. Собственно беда: если сигнал идет (подан) при запуске ДМА, т.е. если данные валятся при запуске ДМА, то все ОК. Потом сигнал можно остановить, подождать, снова подать - все нормально, прерывание срабатывает. Если сигнал при запуске ДМА не подан, т.е. данные не идут, то потом, после подключения сигнала, когда уже валятся данные, прерывание не срабатывает пока не перезапустишь ДМА.
Вот и не могу понять где проблема: пакеты собственно тоже идут периодически, с паузами в несколько сотен микросекунд, пакеты маленькие, по 300 байт.
Как понять, ждет ДМА сейчас данные или по приходу пакета прерывания уже не будет? Может на ДМА какой таймаут есть, но тогда в работе при отключении сигнала и повторном подключении прерывания бы уже не было... Или может при первом прерывании, когда данные не идут, ошибка какая в ДМА срабатывает? Но почему только при первом, а при прерывании и восстановлении потока уже не срабатывает?
Буду благодарен за любые идеи...

UPD: похоже понял. Остался единственный вопрос: если ДМА запущен, а данные не идут, как его прервать? В доке нашел бит STOP_DMA_ER. Можно ли им прервать транзакцию? И какова последовательность? Нужно ли бит run сбрасывать, ставить?
alexPec
С предыдущим разобрался, появился новый вопрос: если срабатыват прерывание одного ДМА во время обработки прерывания от другого дма, не потеряется ли первое? VIC не использую
vadimuzzz
ничего страшного, повисит прерывание, пока проц не освободится
alexPec
Цитата(vadimuzzz @ Aug 29 2011, 14:54) *
ничего страшного, повисит прерывание, пока проц не освободится


А приоритет как назначить, чтоб обработка с более низким приоритетом прерывалась обработчиком с более высоким приоритетом? Это вобще можно без VIC?
vadimuzzz
Цитата(alexPec @ Aug 29 2011, 19:18) *
А приоритет как назначить, чтоб обработка с более низким приоритетом прерывалась обработчиком с более высоким приоритетом? Это вобще можно без VIC?

см. в сторону Nested Hardware Interrupts with the Internal Interrupt Controller. это возможно и без VIC, но только при использовании legacy API
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.