AnsweredAssumed Answered

PPI: ADI_DEV_MODE_CHAINED vs ADI_DEV_MODE_CHAINED_LOOPBACK

Question asked by Colin on Dec 22, 2009
Latest reply on Dec 24, 2009 by PrasanthR

Hi,

   I had exactly the same problem with buffers as ThomasSchuldes did in "Switching between LCD buffers in ADI_DEV_MODE_CHAINED_LOOPBACK" (See http://ez.analog.com/thread/2204), the solution there has helped me get it working.

 

  While trying to get the buffers to swap data sources I also tried ADI_DEV_MODE_SEQ_CHAINED without loopback but I could never get further than the second buffer.

I defined two 2D buffers, both with callback parameters, neither had "Next" links. I used

    adi_dev_Write(DriverHandle, ADI_DEV_2D, (ADI_DEV_BUFFER *)&LcdBuffer);

    adi_dev_Write(DriverHandle, ADI_DEV_2D, (ADI_DEV_BUFFER *)&LcdBuffer2);

to give them both to the driver, and then

    adi_dev_Control(DriverHandle, ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE);

to start the PPI.

 

The callback is called on the completion of the first frame and the code there calls

    adi_dev_Write(DriverHandle, ADI_DEV_2D, (ADI_DEV_BUFFER *)&LcdBuffer);

to re-submit the first buffer.  The call to adi_dev_Write() does not return an error.

At the end of the next frame the callback is called with a DMA error.

 

My questions are:

 

1) Should I be able to keep re-submitting buffers as they're displayed or doesn't

ADI_DEV_MODE_CHAINED work that way?

 

2) In general, how do I work out what caused the DMA error?

   ( ADI_DEV_EVENT_DMA_ERROR_INTERRUPT )

 

I'm using BF534, VDSP 5.0 Update 7

The PPI is in STREAMING mode.

Outcomes