In the reference design for the AD-FMCOMMS board, a VDMA block is used for moving data from the input to the DAC while a DMA block on the ADC side. May I ask the reason/benefit of doing so.
When recording data from the ADC you need CPU interaction anyway to read the received data from the DMA memory location. When sending data to the DAC and you want to send the same pattern continuously you copy the data to the DMA memory region first and then start the DMA and let it copy the pattern repeatedly until you stop it again.
The VDMA allows continuous transfers without requiring any interaction from the CPU. So you can write the pattern you want to send to a memory area and then setup the VDMA to transfer that memory area again and again without having to reprogram the DMA controller. With the AXI-DMA controller this is not possible.
Thank you very much for the answer.
In the case of the DAC the objective is to transfer streaming data from the host interface to the DAC and in the case of the ADC it is vice-versa. May I ask what is the difference here that requires the use of VDMA in the case of DAC while a DMA in the case of the ADC.
For FMCOMMS1 reference design, what is the fastest rate could the DMA send out data to AD9122?
122880000 Sample/s or more?
For FMCOMMS1 reference design, if I am using dac_dma_setup(fmcSel) from
no-OS/test.c at master · analogdevicesinc/no-OS · GitHub
to run a test pattern through DAC,
with const uint16_t sine_lut_i sine_lut_q replaced with my own test pattern.
What limits the test pattern length to 78 pairs of I and Q?
What are the minimum steps I need to do change the pattern length from 78 to, say, 4096? Thanks!
const uint16_t sine_lut_i
const uint16_t sine_lut_q
Why are you saying that the limit is 78? You should be able to increase the buffer size to 4096.
I don't know what the limit is actually.
My trial and error show that
when tx_count is 78 or more, the main.c will run till dac_dma_setup(fmcSel) and then the processor stops responding. Somehow, it is fine if tx_count is 77 or less (it was 32 in the original test.c).
for(index = 0; index < tx_count; index ++)
Let's continue the discussion on the other opened thread: https://ez.analog.com/message/152048
Retrieving data ...