Поиск
Показаны результаты для тегов 'axi-dma'.
-
День добрый всем! Я работаю с коркой AXI DMA от Xilinx. В системе их пара. 1. Одна корка используется так: данные передаются в FPGA на дециматор по одному каналу в одном потоке, а децимированный сигнал обратно забирается с помощью 2-го канала в другом потоке. Драйвер был взят DMA-proxy от Xilinx. Требуется забирать данные по заполнению буфера при получении сигнала с дециматора. Была попытка использовать такие инструменты linux как select и poll, вида: #include <poll.h> int ret = poll( &freceive, 1, -1); if(ret == -1) perror("poll"); if(ret > 0 && (freceive.revents & POLLIN)) { printf("ret = %i\n\n", ret); ioctl(rx_proxy_fd, 0, &dummy); } но они срабатывают и в случае, когда данных в буфере нет, во всяком случае при вызове ioctl для пересылки - система впадает в ожидание и сообщает об истечении таймаута. Проблема в том, что хотелось бы вызывать ioctl именно тогда, когда буфер заполнен, чтобы своевременно забирать данные из него, и не стартовать тогда, когда он не заполнен. Есть ли у кого опыт решения подобной задачи? 2. С использованием второй корки - несколько еще веселее. Был выбран драйвер, который не поддерживает многопоточность. Он здесь: https://github.com/bperez77/xilinx_axidma Здесь также используются оба канала DMA: через первый (TX) данные поступают на интерполятор и дальше в DAC, а через второй (RX) канал данные поступают с FPGA. Здесь тоже хотелось бы вызывать пересылку только в момент, когда данные есть в буфере (в частности это касается второго канала - RX), потому-что если их нет - то команда зависнет на время таймаута, что недопустимо в системе. Имеется ли опыт работы с таким у кого-то? Подскажите пожалуйста.