Sorry, you need to enable JavaScript to visit this website.

Zedboard multi-peripheral application(USB and HDMI reference designs)

Unsolved
2 posts / 0 new
Conme's picture
Conme
Junior(0)
Zedboard multi-peripheral application(USB and HDMI reference designs)

I am in the process of designing a standalone application for zedboard that uses the usb peripheral to receive data every 20ms and plots them in an HDMI screen. I based the input part of my application in the Standalone (Bare-Metal) USB Device Tutorial of this site and the output part in ADV7511 Zedboard Reference Design( http://wiki.analog.com/resources/fpga/xilinx/kc705/adv7511 ).

Each part is fully functional using the ADV7511 Zedboard Reference Design's hardware, but I have trouble trying to connect the two parts in a single software project. I think that the problem lies in the use of the interrupt system that both parts try to initialize and work with, but I am not sure about the specifics.

To my understanding the Xusbps driver uses DMA to tranfer the input data from the usb buffer to the DDR. How does it affect any other use of the DMA? And what configuration should I do for an other peripheral(axivdma) to use DMA as well?

Knowing that the output part uses IIC and DMA, what configurations in the gic should I do for the interrupt system to be able to work?

Thanks in advance for any help

zedhed's picture
zedhed
Moderator(22)
RE: Zedboard multi-peripheral application(USB and HDMI referenc

Hi Conme,

I think to determine whether this is possible, you need to be able to understand the amount of data that you are going to be moving during these two DMA transactions and make sure you are not exceeding the bandwidth limitations of your DDR3 memory. Here is an interesting APP note that is related to performance of the VDMA used to support the HDMI output:

http://www.xilinx.com/support/documentation/application_notes/xapp1205-h...

As for handling two separate interrupts, that should also be possible. I will use our Zynq SW SpeedWay training lab 10 as a reference and you can refer to that lab to get a better understanding of where this code is located in an application.

In Lab 10, there is a single call to SetupInterruptSystem() which is responsible for setting up the GIC and registering interrupt handlers.

Here is where you would need to make sure that you are registering the interrupt handler for each of the interrupts you are using.

The GIC needs to know about the interrupt ID number, interrupt priority, level/edge detection, and the name of the interrupt handler. Here is what lab 10 does in order to handle these requirements for interrupt registration:

XScuGic_SetPriorityTriggerType(IntcInstancePtr, INTC_PWM_INTERRUPT_ID,
0xA0, 0x3);

/* Connect the interrupt handler that will be called when an
* interrupt occurs for the device. */
result = XScuGic_Connect(IntcInstancePtr, INTC_PWM_INTERRUPT_ID,
(Xil_ExceptionHandler) PWMIsr, 0);

/* Enable the interrupt for the PWM controller device. */
XScuGic_Enable(IntcInstancePtr, INTC_PWM_INTERRUPT_ID);

Regards,

-Kevin