I have a ADC hooked up to the McBSP. The ADC is a 6 channel 12 bit (send 16 bit added with zerros)
The stream is like (1 frame): A0 A1 B0 B1 C0 C1 D0 D1 E0 E1 F0 F1 (12 x 8 bits)
This gives me a buffer like:
A0 A1
B0 B1
...
F0 F1
This works but I want a buffer like:
A0 A1
A0 A1
A0 A1
...
A0 A1
B0 B1
....
B0 B1
C0 C1
...
F0 F1
My code for this looks like:
Mcbsp_DataConfig mcbspChanConfig; int16_t RxBuf[2][85]; // Data setup for the Tx/Rx sections // Multi channel setup // Clock setup for the Rx/Tx section // Channel setup
// From the user-device create a DIO adapter
Mcbsp_McrSetup mcbspMultiChanCtrl;
Mcbsp_ClkSetup mcbspClkConfig;
Mcbsp_ChanParams mcbspChanparam;
mcbspChanConfig.phaseNum = Mcbsp_Phase_SINGLE;
mcbspChanConfig.wrdLen1 = Mcbsp_WordLength_16; // => aCnt = 2
mcbspChanConfig.wrdLen2 = Mcbsp_WordLength_16; // => aCnt = 2
mcbspChanConfig.frmLen1 = ELEMENTS_PER_FRAME; // = 6
mcbspChanConfig.frmLen2 = 0; // => bCnt = frmLen1 + frmLen2 = 6
mcbspChanConfig.frmSyncIgn = Mcbsp_FrmSync_DETECT;
mcbspChanConfig.dataDelay = Mcbsp_DataDelay_2_BIT;
mcbspChanConfig.compandSel = Mcbsp_Compand_OFF_MSB_FIRST;
mcbspChanConfig.bitReversal = Mcbsp_BitReversal_DISABLE;
mcbspChanConfig.intMode = Mcbsp_IntMode_ON_SYNCERR;
mcbspChanConfig.rjust = Mcbsp_RxJust_RZF;
mcbspChanConfig.dxState = Mcbsp_DxEna_ON;
mcbspMultiChanCtrl.multiChanMode = Mcbsp_McmMode_ALL_CHAN_ENABLED_UNMASKED;
mcbspMultiChanCtrl.partitionSelA = Mcbsp_PartitionMode_CHAN_0_15;
mcbspMultiChanCtrl.partitionSelB = Mcbsp_PartitionMode_CHAN_16_31;
mcbspMultiChanCtrl.partitionMode = Mcbsp_PartitionMode_2;
mcbspClkConfig.frmSyncMode = Mcbsp_FsClkMode_INTERNAL;
mcbspClkConfig.samplingRate = 7000;
mcbspClkConfig.clkMode = Mcbsp_TxRxClkMode_INTERNAL;
mcbspClkConfig.frmSyncPolarity = Mcbsp_FsPol_ACTIVE_HIGH;
mcbspClkConfig.clkPolarity = Mcbsp_ClkPol_RISING_EDGE;
mcbspChanparam.wordWidth = Mcbsp_WordLength_16;
mcbspChanparam.userLoopJobBuffer = NULL; // I HAVE TRIED: pAdcXyzIf->RxBuf[0]; // needed to use cCnt
mcbspChanparam.userLoopJobLength = 0; //I HAVE TRIED: 85; // cCnt = loopJobLength / aCnt
mcbspChanparam.gblCbk = ErrCallback;
mcbspChanparam.edmaHandle = hEdma[0];
mcbspChanparam.edmaEventQue = 1;
mcbspChanparam.hwiNumber = 9;
mcbspChanparam.dataFormat = Mcbsp_BufferFormat_MULTISLOT_NON_INTERLEAVED; // WAS: Mcbsp_BufferFormat_1SLOT; RO
mcbspChanparam.enableHwFifo = TRUE;
mcbspChanparam.chanConfig = &mcbspChanConfig;
mcbspChanparam.clkSetup = &mcbspClkConfig;
mcbspChanparam.multiChanCtrl = &mcbspMultiChanCtrl;
mcbspChanparam.chanEnableMask[0] = 0;
mcbspChanparam.chanEnableMask[1] = 0;
mcbspChanparam.chanEnableMask[2] = 0;
mcbspChanparam.chanEnableMask[3] = 0;
dioParams.name = "/McBsp0";
dioParams.chanParams = &mcbspChanparam;
// DIO attributes
dioAttrs.devid = NULL;
dioAttrs.params = &dioParams;
dioAttrs.type = DEV_SIOTYPE;
dioAttrs.devp = NULL;
......
What am I doing wrong?
I can't find any documentation how to set th A count, B count and C count when using the McBSP PSP-driver that uses the EDMA3.