UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 60425

14.7 EDK - xscugic_example.c does not work for Zynq CPU1

Description

I try to run the xscugic_example.c example from ISE Design Suite 14.7 for CPU1 but it only works for the first interrupt.

If I modify the example to send multiple interrupts the second one never triggers.


Solution

There is a bug in the way the trigger is cleared.

The function XScuGic_InterruptHandler() in xscugic_intr.c calls    

XScuGic_CPUWriteReg(InstancePtr, XSCUGIC_EOI_OFFSET, IntID);

This does NOT specify the CPUID (so it is always CPUID = 0  that is CPU0).

The workaround is to add the following line to your DeviceDriverHandler() for CPU1 :
 
       *(u32 *)(0xf8f00110) = ( 0x400 | INTC_DEVICE_INT_ID );

This will clear the interrupt specifying CPU1.

The issue has been resolved & verified in Vivado Design Suite release 2014.1.

The fix can be found in the 2014.1 build with the scugic_v2_0 driver.

AR# 60425
Date Created 04/28/2014
Last Updated 05/19/2014
Status Active
Type General Article
Devices
  • Zynq-7000
Tools
  • ISE Design Suite - 14.7