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, ¤tParam);
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, ¤tParam);
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