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

 
 
> Обращение к AXI_DMA приводит к зависанию, Zynq на плате HW-Z7-ZC702
Nivovod
сообщение Mar 2 2018, 12:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 16-06-10
Пользователь №: 57 971



Нужно мне гнать поток данных из своей логики через AXI4-Stream. Написал я интерфейсный блок AXI4-Stream, добавил к своей логике, сделал ядро. Подключил к AXI_DMA. Взял драйвер отсюда https://github.com/Xilinx/embeddedsw/blob/m...e_simple_poll.c
Проходит инициализация DMA и виснет проц на строке
XAxiDma_IntrDisable(&AxiDma, XAXIDMA_IRQ_ALL_MASK, XAXIDMA_DEVICE_TO_DMA);
то есть ровно в том месте где идет попытка записи в регистры DMA.

Ну думаю - накосячил где-то со своим IP. Нашел пошаговую инструкцию подключения и работы с AXI_DMA
http://www.fpgadeveloper.com/2014/03/using...dma-engine.html
Там и vhdl код ядра взял, там и драйвер взял. Все по инструкции сделал. Снова виснет в ТОМ ЖЕ МЕСТЕ. Если закоментировать запрет прерываний, то виснет на строке
XAxiDma_SimpleTransfer(&AxiDma,(UINTPTR) RxBufferPtr, MAX_PKT_LEN, XAXIDMA_DEVICE_TO_DMA);
то есть опять в том месте где идет запись в DMA.

Понимаю что проблема элементарная и кроется в мелочи, но осилить не могу уже несколько дней. Прошу помощи.

P.S. Использую ISE 14.5, XPS, SDK.

Сообщение отредактировал Nivovod - Mar 2 2018, 12:59
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nivovod
сообщение Mar 13 2018, 13:42
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 38
Регистрация: 16-06-10
Пользователь №: 57 971



Продолжим. Запустил под отладчиком построчно ассемблерный код. Функция XAxiDma_IntrDisable имеет вид

001005f8: movw r3, #32808 ; 0x8028
001005fc: movt r3, #16
00100600: ldr r3, [r3]; считали базовый адрес AXI DMA. Он верный 0х40400000
00100604: add r4, r3, #48 ; 0x30 добавили сдвиг 0х30 на регистр S2MM_DMACR = 0х40400030. Сохранили
00100608: movw r3, #32808 ; 0x8028
0010060c: movt r3, #16
00100610: ldr r3, [r3] считали базовый адрес AXI DMA. Он верный 0х40400000
00100614: add r3, r3, #48 ; 0x30 добавили сдвиг 0х30 на регистр S2MM_DMACR.
00100618: mov r0, r3
0010061c: ldr r0, [r0] считали значение регистра S2MM_DMACR = 0х00010002. Соответствует значению по умолчанию
00100620: mov r3, r0
00100624: bic r3, r3, #28672 ; 0x7000 обнулили 3 бита прерываний
00100628: mov r0, r4 ;записали адрес регистра S2MM_DMACR = 0х40400030
0010062c: mov r1, r3 ;записали все тоже значение по умолчанию 0х00010002
00100630: str r1, [r0] ; запись числа 0х00010002 по адресу 0х40400030 приводит к вылету в прерывание DataAbortInterrupt. Работа проца прекращается. При этом уходит в 0 сигнал DONE плис. Вместе с ним иногда еще сигнал INIT_B меняется.

Какие будут версии?

Вот еще что добавлю. Дописал кусок кода читающий все регистры управления DMA. Так вот все считанные значения соответствуют значениям по умолчанию из product guide на AXI DMA

Сообщение отредактировал Nivovod - Mar 13 2018, 13:09
Go to the top of the page
 
+Quote Post



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

 


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


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