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

 
 
6 страниц V  « < 4 5 6  
Reply to this topicStart new topic
> SG-DMA в режиме Stream To Memoy
alexPec
сообщение Jan 30 2013, 18:30
Сообщение #76


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

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



Цитата(Копейкин @ Jan 30 2013, 19:16) *
Прерывания по количеству выполненых дескрипторов:

(ALTERA_AVALON_SGDMA_CONTROL_IE_MAX_DESC_PROCESSED_MSK | (8<<ALTERA_AVALON_SGDMA_CONTROL_MAX_DESC_PROCESSED_OFST) )

т.к. строится зацикленная цепочка дескрипторов и бит PARK установлен, т.е. OWNED_BY_HW не чистится...


Не понял, зачем вам по количеству? Вам же все равно после цепочки вызывать прерывания, так вызовите там do_async_transfer за одно. Циклить то зачем, вызывайте то один то другой.
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Jan 31 2013, 07:43
Сообщение #77


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Мне хотелось по минимуму задействовать процессор, т.к. большой (относительно моей системы) поток данных.
Если иметь прерывание в конце цепочки, то нужно иметь пустой (незадействованный) дескриптор в конце.
Для 2-х цепочек, соответственно 2 пустых дескриптора.
Плюс перезапуск SG-DMA. А так получается замечательно:
1) Цепочка зациклена, перезапуск не требуется
2) Прерывания, в которых только 2 флага (буфер заполнен и верхний/нижний буфер) дёрнуть - минимум операций.

На текущий момент:
1) Зациклить дескрипторы получилось
2) Прерывания по числу дескрипторов приходят не в своё время,
работаю по прерыванию обработки одного дескриптора + подсчёт прерываний.

Сообщение отредактировал Копейкин - Jan 31 2013, 07:49
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Jan 31 2013, 12:51
Сообщение #78


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Посмотрел внимательно на Альтере:
ссылка
там английским языком сказано:
Цитата
Title
Why do I only see one interrupt on the Scatter Gather DMA when enabling the MAX_DESC_PROCESSED interrupt?

Description

If you are using the MAX_DESC_PROCESSED interrupt from the Scatter Gather DMA you must update the MAX_DESC_PROCESSED field at each interrupt to a new value. The core implements an 8 bit counter which automatically wraps to zero when the count value equals 255.

For example, if you wanted the core to generate an interrupt after 2 descriptors were processed continually, you would initially set the MAX_DESC_PROCESSED field to 2 and then upon receiving the first interrupt you would update the MAX_DESC_PROCESSED field to 4, upon receiving the next interrupt update the field to 6 and so on.

Получается нужно обновлять состояние регистра управления на каждом прерывании.
Без вмешательства процессора не обойтись.
А жаль...
Go to the top of the page
 
+Quote Post
alexPec
сообщение Jan 31 2013, 16:30
Сообщение #79


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

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



Цитата(Копейкин @ Jan 31 2013, 16:51) *
Получается нужно обновлять состояние регистра управления на каждом прерывании.
Без вмешательства процессора не обойтись.
А жаль...

Ну да, похоже две цепочки как я говорил проще будут.
Go to the top of the page
 
+Quote Post
Копейкин
сообщение Jan 31 2013, 16:45
Сообщение #80


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

Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134



Я сейчас, как и описывал, сделал бесконечный цикл по дескрипторам и дескрипторы больше не трогаю.
Прерывание - по обработке одного дескриптора.
В обработчике прерывания считаю количество и устанавливаю флаги.
Мне так проще показалось.
Go to the top of the page
 
+Quote Post
prussta
сообщение Feb 1 2014, 17:38
Сообщение #81


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 1-02-12
Из: Екатеринбург
Пользователь №: 70 003



Добрый день! Хочу запустить SGDMA в режиме mem to srteam. Работаю с отладочной платой DE0 от терасик в Quartus II v.11.1, использую Nios II /e. Было решено запустить альтеровский пример с SGDMA и SSRAM( SSRAM(MM) --> (MM)SGDMA(ST) --> (ST)SGDMA(MM) --> SSRAM(MM)) . Я вместо SSRAM использую SDRAM. Пример запускается, прохожу все шаги до while(tx_done == 0) успешно, но здесь все и заканчивается. То есть я не захожу на свой callback function, где меняю значение tx_done. Почему? ДМА не запускается? или м.б. ошибки при сборки в Qsys? Не могу разобраться. Скриншоты и файлы программы прилагаю.
Прикрепленные файлы
Прикрепленный файл  SGDMA.rar ( 606.48 килобайт ) Кол-во скачиваний: 17
 
Go to the top of the page
 
+Quote Post

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

 


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


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