Приветствую.
Прерывание заработало. Проблема была в железе - драйвер 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 это сделать автоматом)???