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

 
 
 
Reply to this topicStart new topic
> Nios II Interrupt
doom13
сообщение Dec 4 2014, 14:47
Сообщение #1


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
В системе имеется несколько источников прерываний:
1) SgDMA Stream To Memory (IRQ #1)
2) Прерывание от PIO (IRQ #0)

На PIO приходит синхроимпульс по которому срабатывает прерывание и запускается SgDMA Memory To Stream. SgDMA Memory To Stream должен за период синхронизации обработать (передать) какое-то количество байт.
Было всё круто, но счас пытаемся выжать максимальную скорость и столкнулся с проблемой - запуск SgDMA Memory To Stream не всегда происходит сразу после прихода синхроимпульса. Иногда запуск SgDMA Memory To Stream происходит с достаточно большой задержкой после прихода синхроимпульса, и, как следствиие, не все данные успевают передаться за период синхронизации. Если отключить прерывания от SgDMA Stream To Memory, то такого не наблюдается.
Видимо, какие-то проблемы с приоритетом прерываний и почемуто прерывание от PIO срабатывает с задержкой. Подскажите куда копать и в чём может быть проблема?
Спасибо.
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Dec 4 2014, 14:58
Сообщение #2


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Какой контроллер прерываний используете - "софтовый" (Internal) или аппаратный (Vectored Interrupt Controller, VIC)?


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
doom13
сообщение Dec 4 2014, 15:01
Сообщение #3


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



В обработчике прерывания от SgDMA Stream To Memory используются (может быть как-то связано?):
1) alt_remap_cached()
2) alt_avalon_sgdma_construct_stream_to_mem_desc()
3) alt_dcache_flush()
ну и куча IOWR и IORD


Цитата(Stewart Little @ Dec 4 2014, 17:58) *
Какой контроллер прерываний используете - "софтовый" (Internal) или аппаратный (Vectored Interrupt Controller, VIC)?

Использую Internal
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Dec 4 2014, 18:32
Сообщение #4


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(doom13 @ Dec 4 2014, 18:01) *
Использую Internal

Не, это не Рио-де-Жанейро sm.gif
Используйте VIC. С точки зрения ниосовского софта ничего переписывать не надо. Но ресурсов FPGA чуть больше понадобится...
Смотрите http://www.altera.com/support/examples/nio...controller.html


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
doom13
сообщение Dec 5 2014, 08:01
Сообщение #5


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(Stewart Little @ Dec 4 2014, 21:32) *
Не, это не Рио-де-Жанейро sm.gif
Используйте VIC. С точки зрения ниосовского софта ничего переписывать не надо. Но ресурсов FPGA чуть больше понадобится...
Смотрите http://www.altera.com/support/examples/nio...controller.html

Спасибо, опробую как-нибудь использование VIC.
Пока нашёл основную проблему в использовании SgDMA Memory To Stream. В обработчике прерывания от GPIO запускаю SgDMA Memory To Stream на передачу данных. Для этого использовалась alt_avalon_sgdma_do_sync_transfer(), из-за чего пока не передавались все данные программа висела в данном обработчике и не давала работать другим прерываниям. Ступил, виноват sm.gif
Go to the top of the page
 
+Quote Post
doom13
сообщение Dec 5 2014, 09:32
Сообщение #6


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Похоже, без VIC-a не обойдусь. Необходимо чтобы прерывание от GPIO сработало не зависимо от наличия в данный момент любого другого прерывания, т.е. чтобы всегда по синхроимпульсу перезапускать SgDMA на передачу. Получится ли это с использованием VIC? Пошёл читать...
Go to the top of the page
 
+Quote Post
doom13
сообщение Dec 5 2014, 11:15
Сообщение #7


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

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Разобрался, разрешение nested interrupts спасает ситуацию, что-то ранее не пользовался вложенностью прерываний для ниоса.
Go to the top of the page
 
+Quote Post

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

 


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


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