This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

EDMA3 doesn't trigger an ISR

Hi everyone,

I would like to trigger an ISR at the end of a DMA completion (I'm working on C6678).

Using the debugger, I've seen that the correct IFR bit is set when I trigger the transfert by CPU.

But my problem is that the program doesn't go into the ISR.

I registered my ISR as is:

    EventRecord.handler = &test_isr_handler;
    EventRecord.arg = 0;

    if (CSL_intcPlugEventHandler(hTest,&EventRecord) != CSL_SOK)
    {
        System_printf("Error: GEM-INTC Plug event handler failed\n");
        exit(0);
    }

For the DMA transfert, my param are as follow:

    param_setup.option = CSL_EDMA3_OPT_MAKE(CSL_EDMA3_ITCCH_DIS,
                                            CSL_EDMA3_TCCH_DIS,
                                            CSL_EDMA3_ITCINT_DIS,
                                            CSL_EDMA3_TCINT_EN,
                                            0,
                                            CSL_EDMA3_TCC_NORMAL,
                                            CSL_EDMA3_FIFOWIDTH_NONE,
                                            CSL_EDMA3_STATIC_EN,
                                            CSL_EDMA3_SYNC_A,
                                            CSL_EDMA3_ADDRMODE_INCR,
                                            CSL_EDMA3_ADDRMODE_INCR);

    param_setup.srcAddr        = (Uint32)&buffer;
    param_setup.dstAddr     = (Uint32)0x40000000;
    param_setup.aCntbCnt    = CSL_EDMA3_CNT_MAKE(TAILLE_BUFFER, 1) ;
    param_setup.cCnt         = 1;
    param_setup.srcDstBidx     = CSL_EDMA3_BIDX_MAKE(1, 1) ;
    param_setup.linkBcntrld = CSL_EDMA3_LINKBCNTRLD_MAKE(CSL_EDMA3_LINK_NULL, 0);
    param_setup.srcDstCidx    = CSL_EDMA3_CIDX_MAKE(0,0);

I activated interrupts for the global region:

    regionIntr.region     = CSL_EDMA3_REGION_GLOBAL;
    regionIntr.intr     = 1;
    regionIntr.intrh     = 0;

    status = CSL_edma3HwControl(EDMA_handle,CSL_EDMA3_CMD_INTR_ENABLE,&regionIntr);

Just after triggering the transfert :

status = CSL_edma3HwChannelControl(canal_handle,CSL_EDMA3_CMD_CHANNEL_SET,NULL);

the correct IFR bit is set, but I my program doesn't run my ISR function.

Does someone have an idea on my problem ? Maybe something I miss during the EDMA configuration ?