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

 
 
> Проблема с прерыванием, Поиск источника и решение
alexPec
сообщение Aug 28 2011, 17:57
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Добрый день всем. Такая проблема. Есть СОПЦ, в нем прерывание (не VIC) возникает при приеме пакета (пакет передается по ДМА, не эзернет, ДМА стрим то мемори). Прерывание возникает именно по ДМА, когда дескриптор чейн обработан, т.е. принято заданное количество байт, в конце обработчика этот же дескриптор чейн запускается снова и ожидается прерывание. Пакеты формируются демодулятором сигнала. Собственно беда: если сигнал идет (подан) при запуске ДМА, т.е. если данные валятся при запуске ДМА, то все ОК. Потом сигнал можно остановить, подождать, снова подать - все нормально, прерывание срабатывает. Если сигнал при запуске ДМА не подан, т.е. данные не идут, то потом, после подключения сигнала, когда уже валятся данные, прерывание не срабатывает пока не перезапустишь ДМА.
Вот и не могу понять где проблема: пакеты собственно тоже идут периодически, с паузами в несколько сотен микросекунд, пакеты маленькие, по 300 байт.
Как понять, ждет ДМА сейчас данные или по приходу пакета прерывания уже не будет? Может на ДМА какой таймаут есть, но тогда в работе при отключении сигнала и повторном подключении прерывания бы уже не было... Или может при первом прерывании, когда данные не идут, ошибка какая в ДМА срабатывает? Но почему только при первом, а при прерывании и восстановлении потока уже не срабатывает?
Буду благодарен за любые идеи...

UPD: похоже понял. Остался единственный вопрос: если ДМА запущен, а данные не идут, как его прервать? В доке нашел бит STOP_DMA_ER. Можно ли им прервать транзакцию? И какова последовательность? Нужно ли бит run сбрасывать, ставить?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
alexPec
сообщение Aug 29 2011, 09:30
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



С предыдущим разобрался, появился новый вопрос: если срабатыват прерывание одного ДМА во время обработки прерывания от другого дма, не потеряется ли первое? VIC не использую
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Aug 29 2011, 10:54
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



ничего страшного, повисит прерывание, пока проц не освободится
Go to the top of the page
 
+Quote Post
alexPec
сообщение Aug 29 2011, 12:18
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата(vadimuzzz @ Aug 29 2011, 14:54) *
ничего страшного, повисит прерывание, пока проц не освободится


А приоритет как назначить, чтоб обработка с более низким приоритетом прерывалась обработчиком с более высоким приоритетом? Это вобще можно без VIC?
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Aug 29 2011, 12:45
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



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

см. в сторону Nested Hardware Interrupts with the Internal Interrupt Controller. это возможно и без VIC, но только при использовании legacy API
Go to the top of the page
 
+Quote Post

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

 


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


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