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.

DM3730 eDMA TCC Interrupt generation

Other Parts Discussed in Thread: DM3730

Hi Guys,

Currently, I'm working on a problem with the DSP side of the DM3730.  We're using DSP Bios 5.41.7.24 and not much else so far.  The data coming in is left justified audio data into McBSP2.

I've managed to enable eDMA, and use it to successfully fill a ping-pong buffer, but I've not yet managed to get the interrupt to fire.  I'm sure I'm not that far away, but I'll post the key piece of code here and hope someone may be able to point out where I'm going wrong.

I get the correct TCC in the IPR, so it's making it that far,  and according to the CPU.IER, IRQ4 is enabled

Hopefully someone out there can see the magic bullet which is required, as I'm getting quite lost here.

Thanks in advance,

paddy

  mcbsp2_params_ping.ACNT = sizeof(unsigned int);
  mcbsp2_params_ping.BCNT = 128;
  mcbsp2_params_ping.CCNT = 1;
  mcbsp2_params_ping.SRC = (unsigned int *)(MY_MCBSP+MCBSPLP_DRR_REG);//(int *) RXBUFF2;//
  mcbsp2_params_ping.DST = (unsigned int *) RXBUFF1;
  mcbsp2_params_ping.SBIDX = 0;//sizeof(int);
  mcbsp2_params_ping.DBIDX = sizeof(unsigned int);
  mcbsp2_params_ping.DCIDX = 0;
  mcbsp2_params_ping.SCIDX = 0;
  mcbsp2_params_ping.SAM = 0;
  mcbsp2_params_ping.DAM = 0;
  mcbsp2_params_ping.TCC = myTCC;
  mcbsp2_params_ping.TCCMODE = 0;
  mcbsp2_params_ping.FWID = 0x2;
  mcbsp2_params_ping.TCINTEN = 1;
  mcbsp2_params_ping.ITCINTEN = 0;
  mcbsp2_params_ping.BCNTRLD = 0;//sizeof(RXBUFF1)/sizeof(int);
  mcbsp2_params_ping.LINK = mcbsp2_pong << 5; //mcbsp2_ping << 5;
  mcbsp2_params_ping.STATIC = 0;
  mcbsp2_params_ping.SYNCDIM=1;
 
  // assign event to TPCCDMAQ1
  *(int *)0x01C00240 = *(int *)0x01C00240 | (0x1<<16);
 
 
  //SYSC_LICFG0 Table: 5-482 SPRUGN P.996
  // ref: 5.4.4.6.7 DMA Completion mode.
  *(int *)0x01C20040 = *(int *)0x01C20040 | 0x300;
 
  eDMA_EnableTCCInterrupt(myTCC); //TPCC_IESR
 
 
  // Enable TPTC0_INTEN: 5.3.2.1.2.4 Completion Interface to TPCC P.709
  *(int *)0x01C10108 = *(int *)0x01C10508 | 0x02;
 
  C64_enableIER (isr_mask | C64_EINT4);
 
  eDMA_AssignChannelToEvent(mcbsp2_ping, EDMA_MCBSP2_DMA_RX); //TPCC_DCHMAPI
 
  eDMA_EnabledEvent(EDMA_MCBSP2_DMA_RX); //TPCC_EESR & WUGEN_MEVTSET2
  WUGEN_EnableInterrupt(IVA_IRQ_MCBSP2_IRQ_RX); //WUGEN_MEVTSET0

  WUGEN_ClearEvent(EDMA_MCBSP2_DMA_RX); //WUGEN_MEVTCLR2

 

 Also, within the DSP/BIOS TCF file I have:
 
  bios.HWI.instance("HWI_INT4").fxn = prog.extern("SDMATxRx");
  bios.HWI.instance("HWI_INT4").useDispatcher = 1;
  bios.HWI.instance("HWI_INT4").interruptSelectNumber = 29;