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.