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

 
 
> Petalinux. AXI DMA.
doom13
сообщение Oct 12 2016, 13:56
Сообщение #1


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

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



Приветствую.
Имеется плата zc706 Xilinx SoC ZYNQ-7000 с 2-хядерным ARM Cortex-A9. Пытаюсь разобраться, как работать с AXI DMA если системой управляет Linux (Petalinux). Драйвер AXI DMA изначально присутствует в системе (код драйвера Xilinx из исходников Petalinux и тестовый модуль в архиве), при старте система сообщает:
Цитата
xilinx-dma 40400000.dma: Xilinx AXI DMA Engine driver Probed!!

Содержимое директории /sys/class/dma следующее:
Цитата
root@zynq:/lib/modules/4.0.0-xilinx/extra# cd /sys/class/dma/
root@zynq:/sys/class/dma#
root@zynq:/sys/class/dma#
root@zynq:/sys/class/dma# ls
dma0chan0 dma0chan1 dma0chan2 dma0chan3 dma0chan4 dma0chan5 dma0chan6 dma0chan7 dma1chan0
root@zynq:/sys/class/dma#
, как понял, dma1chan0 соответствует AXI DMA.
Вопрос - как использовать драйвер Xilinx для управления работой AXI DMA (управлять GPIO через sysfs получилось)? Может оно мне и не нужно - убираем драйвер Xilinx из системы, делаем свой char module и всё работает?
Спасибо.






Прикрепленные файлы
Прикрепленный файл  xilinx_dma.rar ( 12.59 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
doom13
сообщение Oct 26 2016, 14:24
Сообщение #2


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

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



Приветствую.
Прерывание заработало. Проблема была в железе - драйвер xilinx_dma хотел, чтобы прерывание шло на shared interrupt port from PL,
я завёл на private interrupt signal for CPU0.
Вопрос в следующем куске кода:
Код
desc = axidma->device_prep_slave_sg(axidma_ch->chan, sglist, AXIDMA_DESC_NUMBER, DMA_DEV_TO_MEM, DMA_CTRL_ACK | DMA_PREP_INTERRUPT, NULL);
desc->callback = axidma_rx_callback;
dmaengine_submit(desc);
dma_async_issue_pending(axidma_ch->chan);

Колбэк axidma_rx_callback срабатывает только один раз??? В регистре CONTROL AXI DMA порог прерываний стоит 1 (???), задаю sglist из 16 дескрипторов.
Обработчик прерывания драйвера xilinx_dma срабатывает по завершению каждого дескриптора.
Как сделать, чтобы axidma_rx_callback выполнялась по каждому прерыванию от DMA? Второй вариант, как увеличить порог генерации прерывания (не должна ли
*_prep_slave_sg это сделать автоматом)???
Go to the top of the page
 
+Quote Post



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

 


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


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