I use:
Bios_5_42_01_09.
Ccsv6.
Edma3_lld_01_11_03_01.
Pspdrivers_01_30_00_05.
Xdctools_3_30_03_47_core.
Problem in string number 99.
I can get data from codec. I forever wait SIO_ready. It is not work when i use 2 or more buffers. When buffer is one it is all works.
I not use aic31 driver and audio driver, only mcasp.
Part of my code:
#define BUFLEN 4096
#define BUFALIGN 128
#define NUM_BUFS 2
Uint8 buf[NUM_BUFS][BUFLEN];
extern Int edma3init();
extern EDMA3_DRV_Handle hEdma;
extern Mcasp_ChanParams mcasp_chanparam;
Mcasp_HwSetupData mcaspRcvSetup = {
/* .rmask = */ 0xFFFFFFFF, /* All the data bits are to be used */
/* .rfmt = */ 0x000180F0,
/* .afsrctl = */ 0x00000110, /* burst mode,
* Frame sync is one bit
* Rising edge is start of frame
* externally generated frame sync
*/
/* .rtdm = */ 0x00000003, /* slot 1 is active (DSP) */
/* .rintctl = */ 0x00000000, /* sync error and overrun error */
/* .rstat = */ 0x00000050, /* reset any existing status bits */
/* .revtctl = */ 0x00000000, /* DMA request is enabled or disabled */
{
/* .aclkrctl = */ 0x00000020,
/* .ahclkrctl = */ 0x00008000,
/* .rclkchk = */ 0x00FF0000
}
} ;
Mcasp_ChanParams mcasp_chanparam =
{
0x0001, /* number of serialisers */
{Mcasp_SerializerNum_12, }, /* serialiser index */
&mcaspRcvSetup,
TRUE,
Mcasp_OpMode_TDM, /* Mode (TDM/DIT) */
Mcasp_WordLength_32,
NULL,
0,
NULL,
NULL,
2, /* number of TDM channels */
Mcasp_BufferFormat_1SER_MULTISLOT_INTERLEAVED,
TRUE,
TRUE
};
void audioUserMcaspInit(){
/* power on the Mcasp 1 instance in the PSC */
Psc_ModuleClkCtrl(Psc_DevId_1, CSL_PSC_MCASP1, TRUE);
Mcasp_init();
mcasp0Params = Mcasp_PARAMS;
mcasp0Params.hwiNumber = 8;
mcasp0Params.enablecache = TRUE;
mcasp0Params.mcaspHwSetup.glb.pfunc = 0x0200E7FF;
mcasp0Params.mcaspHwSetup.glb.pdir = 0x08000800;
mcasp0Params.mcaspHwSetup.glb.ctl = 0x00001F1E;
mcasp0Params.mcaspHwSetup.rx.fmt = 0x000180F0;
mcasp0Params.mcaspHwSetup.rx.frSyncCtl = 0x00000110;
mcasp0Params.mcaspHwSetup.rx.tdm = 0x00000000;
mcasp0Params.mcaspHwSetup.rx.stat = 0x000001ff;
mcasp0Params.mcaspHwSetup.rx.clk.clkSetupClk = 0x00000020;
mcasp0Params.mcaspHwSetup.rx.clk.clkSetupHiClk = 0x00008000;
mcasp0Params.mcaspHwSetup.rx.clk.clkChk = 0x00FF0000;
mcasp0Params.mcaspHwSetup.tx.fmt = 0x000180F0;
mcasp0Params.mcaspHwSetup.tx.frSyncCtl = 0x00000110;
mcasp0Params.mcaspHwSetup.tx.tdm = 0x00000003;
mcasp0Params.mcaspHwSetup.tx.stat = 0x00000050;
mcasp0Params.mcaspHwSetup.tx.clk.clkSetupClk = 0x00000080;
mcasp0Params.mcaspHwSetup.tx.clk.clkSetupHiClk = 0x00008000;
mcasp0Params.mcaspHwSetup.tx.clk.clkChk = 0xEFFF0000;
}
static void createStreams(){
SIO_Attrs sioAttrs;
sioAttrs = SIO_ATTRS;
sioAttrs.nbufs = NUM_BUFS;
sioAttrs.align = BUFALIGN;
sioAttrs.model = SIO_ISSUERECLAIM;
mcasp_chanparam.edmaHandle = hEdma;
inStream = SIO_create("/dioMcaspIN", SIO_INPUT, BUFLEN, &sioAttrs);
}
extern LOG_Obj trace;
void i2s_test(){
edma3init();
codec_init_aic32(PCM_16,SR_48000);
EnablePinResetCodec();
createStreams();
Int count;
for(count = 0; count < NUM_BUFS; count++)
if(SYS_OK != SIO_issue(inStream, (Ptr) buf[count], BUFLEN, NULL))
LOG_printf(&trace, "Error issue\n");
Ptr rcv;
while(1){
if(SIO_ready(inStream))
if(SYS_OK == SIO_reclaim(inStream, (Ptr *)&rcv, NULL))
if(SYS_OK != SIO_issue(inStream, rcv, BUFLEN, NULL))
LOG_printf(&trace, "Error issue\n");
}
return;
}
/*-------------------------------------------------------------------------------------------------------------------------
bios.UDEV.create("mcasp0");
bios.UDEV.instance("mcasp0").fxnTableType = "IOM_Fxns";
bios.UDEV.instance("mcasp0").initFxn = prog.extern("audioUserMcaspInit");
bios.UDEV.instance("mcasp0").params = prog.extern("mcasp0Params");
bios.UDEV.instance("mcasp0").fxnTable = prog.extern("Mcasp_IOMFXNS");
bios.UDEV.instance("mcasp0").deviceId = 0;
var dioCodec = bios.DIO.create("dioMcaspIN");
dioCodec.deviceName = prog.get("mcasp0");
dioCodec.useCallBackFxn = false;
dioCodec.chanParams = prog.extern("mcasp_chanparam");
Please help.