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 Interruption problem

Hi,

I developed a custom board with the OMAP L138 and a ADC (ADS1278). Now my goal is read the samples from the ADC with a simple serializer and store in the DSP Internal RAM. I'm using the McASP PSPIOM driver and the TTO EDMA3 LLD driver, but i'm thinking that's something wrong in my configuration.

I already configure the McASP and the EDMA3. I had create a EDMA channel and linking to another one for reloading the parameters of the first one.

EDMA3 Channel 0:

Channel ID: 0, TCC = 0, TCINTEN =1

EDMA3 Channel 64: (Link channel)

I can see the EDMA3 channel working synchronized with the McASP AREVT, but i can't generate an interruption in the end of the EDMA3 transfer completion...

This is the bios configuration for EDMA3 events:

/* ECM configuration */
bios.HWI.instance("HWI_INT7").interruptSelectNumber = 0;
bios.HWI.instance("HWI_INT8").interruptSelectNumber = 1;
bios.HWI.instance("HWI_INT9").interruptSelectNumber = 2;
bios.HWI.instance("HWI_INT10").interruptSelectNumber = 3;

bios.HWI.instance("HWI_INT7").fxn = prog.extern("_lisrEdma3ComplHandler0");

and this is the channel request:

    EDMA3_DRV_Result edma3Result = EDMA3_DRV_SOK; 
    EDMA3_DRV_PaRAMRegs currentParam;
    unsigned int iChannel2 = EDMA3_DRV_LINK_CHANNEL;
   
    EDMA3_RM_EventQueue eventQ = 0; // both used below in _requestChannel()
    EDMA3_RM_TccCallback tccCb = &INT8McASP;
   

    edma3Result = EDMA3_DRV_requestChannel (EdmaObj->hEdma, &EdmaObj->iChannel, &EdmaObj->iTcc, eventQ, tccCb, NULL);


    currentParam.aCnt = 4;
    currentParam.bCnt = 8;
    currentParam.bCntReload = 8; 
    currentParam.cCnt = 1;
    currentParam.destAddr = Dst;
    currentParam.destBIdx = 4;
    currentParam.destCIdx = 0;
    currentParam.srcAddr = Src;
    currentParam.srcBIdx = 0;
    currentParam.srcCIdx = 0;
   
    currentParam.opt = 0x00000000;
   
    edma3Result = EDMA3_DRV_setPaRAM (EdmaObj->hEdma, EdmaObj->iChannel, &currentParam);

    EDMA3_DRV_setOptField (EdmaObj->hEdma,EdmaObj->iChannel, EDMA3_DRV_OPT_FIELD_SYNCDIM, EDMA3_DRV_SYNC_A);        
    EDMA3_DRV_setOptField (EdmaObj->hEdma,EdmaObj->iChannel, EDMA3_DRV_OPT_FIELD_TCINTEN, EDMA3_DRV_TCINTEN_EN);  
    EDMA3_DRV_setOptField (EdmaObj->hEdma,EdmaObj->iChannel, EDMA3_DRV_OPT_FIELD_TCC, 0u); 


    edma3Result = EDMA3_DRV_requestChannel (EdmaObj->hEdma, &iChannel2, &EdmaObj->iTcc, eventQ, tccCb, NULL);
   
    edma3Result = EDMA3_DRV_setPaRAM (EdmaObj->hEdma, iChannel2, &currentParam);
   
    EDMA3_DRV_linkChannel (EdmaObj->hEdma, EdmaObj->iChannel, iChannel2);

Can somebody help me? How I configure the EDMA3 to generate a interruption and call a ISR function?

Thanks,

Luis Filipe Mendes