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

 
 
> 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 25 2016, 14:16
Сообщение #2


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

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



Приветствую.
AXI DMA немного ожил. Но дохнет во время выполнения кода (код модуля ниже):
Код
pr_info("Waiting for completion...\n");
wait_for_completion_interruptible(&cmp);

Вопрос, что сделано не так и чего не хватает для завершения функции wait_for_completion_interruptible?
Ещё ядро генерит прерывание (см. рисунок), но система его почему-то не воспринимает?
Код
root@zynq:~# cat /proc/interrupts
           CPU0       CPU1      
16:          0          0       GIC  27  gt
17:          0          0       GIC  43  ttc_clockevent
18:       3373       5106       GIC  29  twd
21:         43          0       GIC  39  f8007100.adc
141:          0          0       GIC  57  cdns-i2c
143:          0          0       GIC  35  f800c000.ocmc
144:         31          0       GIC  82  xuartps
145:          0          0       GIC  51  e000d000.spi
146:       1048          0       GIC  54  eth0
147:       1327          0       GIC  56  mmc0
148:          0          0       GIC  45  f8003000.dmac
149:          0          0       GIC  46  f8003000.dmac
150:          0          0       GIC  47  f8003000.dmac
151:          0          0       GIC  48  f8003000.dmac
152:          0          0       GIC  49  f8003000.dmac
153:          0          0       GIC  72  f8003000.dmac
154:          0          0       GIC  73  f8003000.dmac
155:          0          0       GIC  74  f8003000.dmac
156:          0          0       GIC  75  f8003000.dmac
157:          0          0       GIC  40  f8007000.devcfg
164:          0          0       GIC  41  f8005000.watchdog
165:          0          0       GIC  63  xilinx-dma-controller
IPI1:          0          0  Timer broadcast interrupts
IPI2:       1286       1066  Rescheduling interrupts
IPI3:          0          0  Function call interrupts
IPI4:         29         30  Single function call interrupts
IPI5:          0          0  CPU stop interrupts
IPI6:          0          0  IRQ work interrupts
IPI7:          0          0  completion interrupts
Err:          0


PS:
AXI DMA работает в режиме S2MM, пакеты данных на него бросает генератор трафика.
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные файлы
Прикрепленный файл  axidma_pl2ps.txt ( 6.52 килобайт ) Кол-во скачиваний: 24
 
Go to the top of the page
 
+Quote Post
Jury093
сообщение Oct 25 2016, 14:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050



Цитата(doom13 @ Oct 25 2016, 17:16) *
Ещё ядро генерит прерывание (см. рисунок), но система его почему-то не воспринимает?

мда.. тут я фигню спорол не по делу.. был неправ..
в общем случае в драйвере в функции _probe назначается gpio, который регистрируется как сигнал прерывания.. далее в той же функции регистрируется прерывание и передается ссылка на обработчик прерывания.. возможны ньюансы, я не все варианты знаю..
у вас видимо где-то обрыв в логической цепочке.. попробуйте для начала убедится, что происходит вызов обработчика - в ветку, где есть строка static irqreturn_t вставить обычный printk("Oops!\n");
если до этого дело не доходит, проверьте отдается ли под ваш драйвер gpio (и понимает ли он фронт/уровень)..


Сообщение отредактировал Jury093 - Oct 25 2016, 15:00
Go to the top of the page
 
+Quote Post



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

 


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


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