Hello,I'm working with the AD9361 on a fmcommS5 board and a ZCU102 as carrier board and with no-OS driver sources.I'm trying to perform some DMA acquisitions on the development kit.So in first, I test "ADC_DMA_EXAMPLE" application by setting the corresponding define in "config.h" file.The generation of the application succeeds with no error and it seems operate correctly but no DMA acquisition is performed.
The development environment is as follows :Sw : Vivado 2018.2 + XSDKHw : ZCU102 + FMCOMMS5Versions : hdl and no-OS, both from master branch + Patch (post from Olive_21 March 14, 2019 tittle "AD9361 initialization issue") on GPIO numbers (GPIO_RESET, ...)Thanks for help,Jean
Can you post your UART messages here?
Also when you say "no DMA acquisition is performed", I presume the data you read from memory is junk, right?Andrei
Thanks for the quick reply.
In fact, to be precise, I try to perform acquisition by switching on "ADC_DMA_IRQ_EXAMPLE". The only two UART messages I got are the good initialization of the AD9361 devices. It seems that the adc_dma_isr interrupt routine is never called to perform the DMA acquisition.
When using the ADC_DMA_EXAMPLE only (without interruption) everything works fine. I can check that the samples inserted thanks to DAC DDS (1 tone) and the AD9361 Tx -> Rx loopback mode are those written to DDR memory. Even if I noticed some crosstalk between I,Q channels in 2RX 2TX mode.
How could I check if the interrupt is raised ?
Question moved to Microcontroller no-OS Drivers forum.Andrei
From a code perspective, make sure that this code is running:
status = XScuGic_Connect(&gic, ADC_DMA_INT_ID, (Xil_ExceptionHandler)adc_dma_isr, NULL);
to make sure that the ISR gets connected.
Then maybe check that ADC_DMA_INT_ID is correct.
I guess this may depend on the HDL design.
Not sure if this differs from ZCU102 vs ZC706.
With interrupts, it is a bit different, because your main loop may need to set certain parameters in the DMA registers, then an ISR should trigger.
Reg values for DMAC are explained here:
Typically, the Linux driver uses interrupts, and is generally better validated than the no-OS code.
There may be some issues in the no-OS code with interrupts. Usually people don't use interrupts all that much in no-OS code, since they are harder to work with, and require locking & synchronization (to avoid data corruption).