AnsweredAssumed Answered

FMCOMMS1 with KC705 with no os

Question asked by jdelorme on Jul 25, 2013
Latest reply on Sep 25, 2013 by rejeesh

Hi,

I am currently starting to use the FMCOMMS1 coupled with the Xilinx KC 705 with no os driver onto the HPC port.

I have followed the procedure for regenerating the ngc netlist files for the KC705 then synthesize and place and route the whole design through the EDK sample project provided for the KC 705.

Then I have exported the design under SDK and use the No OS example application project for the KC 705.

http://wiki.analog.com/resources/eval/user-guides/ad-fmcomms1-ebz/software/baremetal

 

After compiling and tested the application onto the platform I discovered that there is a bug in the C code example which make the example tests fail... The concernend file is test.c stuck in the do while loop in function adc_capture presented below:

void adc_capture(uint32_t sel, uint32_t qwcnt, uint32_t sa)

The line Xil_Out32((baddr + 0x00c), (0x10000 | (qwcnt-1))); is wrong when refering to the txt file which is the only known documentation for the axi_adc IP i found. The correct line is:

Xil_Out32((baddr + 0x00c), (1<<31 | (qwcnt-1))); // start capture

And know the values read on the ADC transferred into the DDR memory are all equal to 0 instead of varying. Meaning that the values are not well collected...

Then my question is does the no os examples are tested onto the supported demonstration board before publishing them onto the analog website?

Due to the error I found I doubt of the example it self...

Does somebody can share with me its exeperience with the same hardware configuration? It could avoid me to waste to much time...

Thanks for your help.

Regards,

Julien

{

uint32_t baddr;

baddr = (sel == IICSEL_B1HPC) ? DMA9643_1_BASEADDR : DMA9643_0_BASEADDR;

Xil_Out32((baddr + 0x030), 0); // clear dma operations

Xil_Out32((baddr + 0x030), 1); // enable dma operations

Xil_Out32((baddr + 0x048), sa); // capture start address

Xil_Out32((baddr + 0x058), (qwcnt * 8)); // number of bytes

baddr = (sel == IICSEL_B1HPC) ? CFAD9643_1_BASEADDR : CFAD9643_0_BASEADDR;

Xil_Out32((baddr + 0x00c), 0x0); // capture disable

Xil_Out32((baddr + 0x010), 0xf); // clear status

Xil_Out32((baddr + 0x014), 0xf); // clear status

Xil_Out32((baddr + 0x00c), (0x10000 | (qwcnt-1))); // start capture

do

{

delay_ms(1);

}

while ((Xil_In32(baddr + 0x010) & 0x1) == 1);

if ((Xil_In32(baddr + 0x010) & 0x02) == 0x02)

{

xil_printf("adc_capture: overflow occured, data may be corrupted\n\r");

}

#ifdef _XPARAMETERS_PS_H_

Xil_DCacheFlush();

#else

microblaze_flush_dcache();

microblaze_invalidate_dcache();

#endif

}

 

Outcomes