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

 
 
> Xilinx Microblaze + DMA(Scatter/Gather)
Denis C
сообщение Oct 6 2015, 21:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 9-06-06
Из: Saint-Petersburg
Пользователь №: 17 924



Здравствуйте! Хотелось бы спросить у знатоков о следующей ситуации:
Используется DMA в режиме Scatter/Gather. Отлаживаю канал S2MM. Софт написан на основе примера от Xilinx'а "xaxidma_multichan_sg_intr".
Завел к примеру 8 дескрипторов (1 дескриптор = 1 внешний AXI-stream пакет, кончающийся по сигналу TLAST).
Приходят 8 пакетов. После чего все дескрипторы становятся обработанными (post-processed). Если потом не освободить и не передать корке DMA новые дескрипторы, то естественно пропадает сигнал TREADY и еще неожиданно появляется ошибка-прерывание(флаг Err_irq в 14 бите регистра S2MM_DMASR) и после этого корка не работает без сброса.
Тем, что я не даю корке новые дескрипторы, я пытался эмулировать задержку дальнейшей обработки данных (некий Flow-control организовать). При этом я расчитывал, что корка просто не будет давать сигнал TREADY источнику данных.
Вопрос: как в данной ситуации правильно организовать flow-control S2MM в данном случае ? Ведь могут быть ситуации, когда записанные в память данные, потребитель обрабатывает с меньшей скоростью.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
doom13
сообщение Oct 10 2015, 07:35
Сообщение #2


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

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



Цитата(Denis C @ Oct 7 2015, 00:26) *
Если потом не освободить и не передать корке DMA новые дескрипторы, то естественно пропадает сигнал TREADY и еще неожиданно появляется ошибка-прерывание(флаг Err_irq в 14 бите регистра S2MM_DMASR) и после этого корка не работает без сброса.

В моём случае нормально работает: закончились дескрипторы - DMA остановился (состояние IDLE), добавили новые дескрипторы - работает дальше (использую свой драйвер).
Go to the top of the page
 
+Quote Post
Denis C
сообщение Oct 11 2015, 11:43
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 9-06-06
Из: Saint-Petersburg
Пользователь №: 17 924



Цитата(doom13 @ Oct 10 2015, 10:35) *
В моём случае нормально работает: закончились дескрипторы - DMA остановился (состояние IDLE), добавили новые дескрипторы - работает дальше (использую свой драйвер).


Подскажите плз какие прерывания разрешаете в регистре DMACR, все 3 (ERR_IrqEn, Dly_IrqEn, IOC_IrqEn) ?
Go to the top of the page
 
+Quote Post
doom13
сообщение Oct 11 2015, 12:06
Сообщение #4


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

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



Цитата(Denis C @ Oct 11 2015, 14:43) *
Подскажите плз какие прерывания разрешаете в регистре DMACR, все 3 (ERR_IrqEn, Dly_IrqEn, IOC_IrqEn) ?

ERR_IrqEn, IOC_IrqEn
Go to the top of the page
 
+Quote Post
Denis C
сообщение Oct 13 2015, 12:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 9-06-06
Из: Saint-Petersburg
Пользователь №: 17 924



Немного уточню вопрос после поисков проблемы. Суть в том, что DMA загружает ранее уже обработанные дескрипторы (в которых я не очистил флаг CMP). Из-за этого возникает ошибка SGIntErr. Т.е. DMA по дескрипторной цепочке возвращается к началу.
Возникает вопрос по регистрам S2MM_CURDESC и S2MM_TAILDESC:
Допустим выделил 2 дескриптора, установил регистры CURDESC = adr, TAILDESC = adr + 64. После прихода первого пакета CURDESC = TAILDESC = adr+64. После прихода второго пакета регистры вновь CURDESC = adr, TAILDESC = adr + 64.
Хотя в ДШ пишут: "The tail pointer is initialized by software to point to the end of the descriptor chain. This becomes the pause point for hardware. When
hardware begins running, it fetches and processes each descriptor in the chain until it reaches the tail pointer. The AXI DMA then pauses descriptor processing."
Т.е. когда указатели CURDESC и TAILDESC сравняются DMA должно остановиться, а не продолжать загружать дескрипторы. А я вижу противоположное.
Что-то я не так видимо понимаю...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th June 2025 - 21:29
Рейтинг@Mail.ru


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