I need
to transfer data in contiunuos mode, from the serial mcbsp to a buffer (either
or ping pong) as follows:
McBsp Buffer (PcmToVoipPing or PcmToVoipPong)
d160 c160 b160 a160 ........ d2 c2 b2 a2 d1 c1 b1 a1 ------------------> a1..............a160 b1........b160c1.........c160d1.........d160
I used the following parameters
init mcbsp
mcbspRegs->PCR = CSL_FMKT(MCBSP_PCR_FSXM,EXTERNAL)
| CSL_FMKT(MCBSP_PCR_FSRM,EXTERNAL) //internal fram sync
| CSL_FMKT(MCBSP_PCR_CLKXM,INPUT) //trans clock mode
| CSL_FMKT(MCBSP_PCR_CLKRM,INPUT) //receive clock mode
| CSL_FMKT(MCBSP_PCR_CLKRP,RISING) // fase receive
| CSL_FMKT(MCBSP_PCR_CLKXP,FALLING);// fase trans
mcbspRegs->RCR = CSL_FMKT(MCBSP_RCR_RDATDLY,1BIT)
| CSL_FMKT(MCBSP_RCR_RWDLEN1,8BIT)
| CSL_FMKT(MCBSP_RCR_RPHASE,SINGLE_FRM)
| CSL_FMK(MCBSP_RCR_RFRLEN1,63);
mcbspRegs->XCR = CSL_FMKT(MCBSP_XCR_XDATDLY,1BIT)
| CSL_FMKT(MCBSP_XCR_XWDLEN1,8BIT)
| CSL_FMKT(MCBSP_XCR_XPHASE,SINGLE_FRM)
| CSL_FMK(MCBSP_XCR_XFRLEN1,63);
mcbspRegs->MCR = CSL_FMKT(MCBSP_MCR_RMCME,PARTITIONS8)
| CSL_FMKT(MCBSP_MCR_RMCM,CHDISABLE)
| CSL_FMKT(MCBSP_MCR_XMCME,8PARTITION)
| CSL_FMKT(MCBSP_MCR_XMCM,DISABLE);
mcbspRegs->RCERE0=0x0;
mcbspRegs->RCERE1=0xF000000;
init EDMA :
edma3ccRegs->EESR=(32);
edma3ccRegs->IESR=(32);
edma3ccRegs->PARAMSET[5].OPT=0x905004;
edma3ccRegs->PARAMSET[5].A_B_CNT=0x40001;
edma3ccRegs->PARAMSET[5].SRC=(Uint32)&(mcbspRegs->DRR);
edma3ccRegs->PARAMSET[5].DST=(Uint32)PcmToVoipPing;
edma3ccRegs->PARAMSET[5].SRC_DST_BIDX=0xA00000;
edma3ccRegs->PARAMSET[5].LINK_BCNTRLD=0x04840;
edma3ccRegs->PARAMSET[5].SRC_DST_CIDX=0x10000;
edma3ccRegs->PARAMSET[5].CCNT=0xA0;
edma3ccRegs->PARAMSET[66].OPT=0x905004;
edma3ccRegs->PARAMSET[66].A_B_CNT=0x40001;
edma3ccRegs->PARAMSET[66].SRC=(Uint32)&(mcbspRegs->DRR);
edma3ccRegs->PARAMSET[66].DST=(Uint32)PcmToVoipPong;
edma3ccRegs->PARAMSET[66].SRC_DST_BIDX=0xA00000;
edma3ccRegs->PARAMSET[66].LINK_BCNTRLD=0x04860;
edma3ccRegs->PARAMSET[66].SRC_DST_CIDX=0x10000;
edma3ccRegs->PARAMSET[66].CCNT=0xA0;
edma3ccRegs->PARAMSET[67].OPT= 0x905004;
edma3ccRegs->PARAMSET[67].A_B_CNT=0x40001;
edma3ccRegs->PARAMSET[67].SRC=(Uint32)&(mcbspRegs->DRR);
edma3ccRegs->PARAMSET[67].DST=(Uint32)PcmToVoipPing;
edma3ccRegs->PARAMSET[67].SRC_DST_BIDX=0xA00000;
edma3ccRegs->PARAMSET[67].LINK_BCNTRLD=0x04840;
edma3ccRegs->PARAMSET[67].SRC_DST_CIDX=0x10000;
edma3ccRegs->PARAMSET[67].CCNT=0xA0;
/* strart seriale Mcbsp */
CSL_FINST(mcbspRegs->SPCR,MCBSP_SPCR_GRST,RESET); //SRGR out of reset
CSL_FINST(mcbspRegs->SPCR,MCBSP_SPCR_FRST,RESET);
CSL_FINST(mcbspRegs->SPCR,MCBSP_SPCR_RRST,ENABLE); //receiver enable
CSL_FINST(mcbspRegs->SPCR,MCBSP_SPCR_XRST,ENABLE); //transmitter enable
but as a result I transfer only 2 frame and I have 2 call interrupt
have I wrong to set some parameter?