Showing results for 
Show  only  | Search instead for 
Did you mean: 
Registered: ‎11-10-2017

Zynq 7015 PL to PS interrupt freezes the system

We are running into a crash on our Zynq 7015 system PL + (core0 Linux, core 1 Freertos with OpenAmp AMP).
We have some interrupts triggered from PL to core1. We observed that the crash occurs when one interrupt from PL is triggered >100us .
We are not sure if the interrupt handling in RTOS is done correctly. Attached is a code snippet of the initialization and handler. Any ideas if this is enough??
Any other clearing "housekeeping" to be done??


void FpdiInterruptHandler(void* data)
    DRV_FpdiRef self = (DRV_FpdiRef)data;
    uint32_t IntIDFull;

    /* Application code.. makes a send to queue and portyiledfromISR*/

    //Clear interrupt in ps
    IntIDFull = XScuGic_CPUReadReg(&xInterruptController, XSCUGIC_INT_ACK_OFFSET);
    XScuGic_CPUWriteReg(&xInterruptController, XSCUGIC_EOI_OFFSET, IntIDFull);

static bool_t SetupFpdiInterrupts(DRV_FpdiRef self)
    bool_t ret = FALSE;
    int32_t retVal = XST_SUCCESS;
    uint16_t fpdiIntId = 0;
    u8 intPriority = 0;
    u8 int_trigger = 0;
    const uint8_t ucRisingEdge = 3;
    fpdiIntId = XPS_FPGA4_INT_ID;

    retVal = XScuGic_Connect(&xInterruptController, fpdiIntId,
                                               (Xil_InterruptHandler) FpdiInterruptHandler,  (void *) self);
    if (XST_SUCCESS == retVal)
        XScuGic_GetPriorityTriggerType(&xInterruptController, fpdiIntId, &intPriority, &int_trigger );
        XScuGic_SetPriorityTriggerType( &xInterruptController, fpdiIntId, 144, ucRisingEdge );
        /* Target the interrupt to this CPU (so that this code can run on PS0 in non-AMP mode, or run on PS1 in AMP mode) */
        Set_Interrupt_Target_To_This_CPU( &xInterruptController, fpdiIntId );
        /* Enable the interrupt for the device */
        XScuGic_Enable(&xInterruptController, fpdiIntId);
        ret = TRUE;
    return ret;

0 Kudos
0 Replies