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.

OMAP-L138, IPC, Audio BIOSPSP McASP reset timeout

Other Parts Discussed in Thread: OMAP-L138, SYSBIOS

Hello,

 

I face an issue with the McASP BIOSPSP driver I struggle with and I would need some help.

I'm trying to use an IPC Stream to send out samples to the AIC31 codec of an OMAP-L138 LCDK, through audio, Aic31, McASP and I2C drivers provided in the BIOSPSP driver Library (03.01.01.00). It's a basic mix of the IPC io example and BIOSPSP audio example (run on the 674x core), plus the IPC messageQ example (as I want the ARM core to perform some USB transfer in a further step).

Initially I couldn't properly compile the BIOSPSP drivers (my evm target not being supported) so I basically brought to my project all the files I needed from the Library to build the project.

I used the IOMAdapter of the IPC (1.23.05.40) to map the BIOSPSP Audio driver and use it as a Stream output.

Everything seems to run well when creating the Stream, but when I issue the first sample, the program timeouts when I try to clear the XMT serializer (stack : audioMdSubmitChan() -> mcaspMdSubmitChan() -> mcaspSubmitReq() -> Mcasp_localLoadPktToEdma() -> Mcasp_localActicateSmFsForXmt() -> mcaspBitSetGblXCtl()).

CCS v5.2.1.00018, SYSBIOS v6.33.01.25

Here is the code portion where the program timeouts:

 

static Void mcaspBitSetGblXCtl(Mcasp_Object *instHandle, Uint32 bitMaskVal)

{

...

        (instHandle->hwInfo.regs)->XGBLCTL =

            ((instHandle->hwInfo.regs)->XGBLCTL | bitMaskVal);

 

while ((((instHandle->hwInfo.regs)->GBLCTL & bitMaskVal) !=

                bitMaskVal) && (timeout > 0))

        {

/* reduce the retry count value                                   */

            timeout--;

            isTask = BIOS_getThreadType() == BIOS_ThreadType_Task;           

/* wait for 1 tick only if called from a task context             */

           if (TRUE == isTask)

            {

                Task_sleep(1);

            }

        }

        assert(0 != timeout);

 

Any help would be much appreciated,

Philippe