CX3 DMA and GPIF

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
waxi_4600311
Level 1
Level 1

Hello,

   I use cyusb3065 and 0v5640 to tranmit image data by DMA. I create 3 dma channel to transmit stream date. I create Dma channel as:

  (1)Dma0 :

      prodSckId = CY_U3P_PIB_SOCKET_0

       consSckId = CY_U3P_CPU_SOCKET_CONS

       notification = CY_U3P_DMA_CB_PROD_EVENT

(2)Dma1:

     prodSckId = CY_U3P_PIB_SOCKET_1

       consSckId = CY_U3P_CPU_SOCKET_CONS

       notification = CY_U3P_DMA_CB_PROD_EVENT

(3)Dma2:

     prodSckId = CY_U3P_CPU_SOCKET_PROD

       consSckId = CY_U3P_UIB_SOCKET_CONS_3

  Dma0 and Dma1 registe same dma callback function. Dma2 registe none callback.

  In this dma callback, if callback type is CY_U3P_DMA_CB_PROD_EVENT, I use api CyU3PDmaChannelGetBuffer() get buffer with  dma2 handle, and commit buffer by dma2 channel.

   I get gpif state and print it after commit buffer. I find gipf state is:

GpifStatus = 7  //CX3_WAIT_TO_FILL_SCK1

GpifStatus = 131

GpifStatus = 131

GpifStatus = 131

GpifStatus = 9   //CX3_PARTIAL_BUFFER_IN_SCK0

GpifStatus = 9

GpifStatus = 9

GpifStatus = 9

    And I find the GPIF callback did not enter. I can see bushound catch 8 stream packet.  What's my problem? How can I use these 3 dma channel cooperate with GPIF correctly?

0 Likes
1 Reply
Hemanth
Moderator
Moderator
Moderator
First like given First question asked 750 replies posted

Hi,

- Did you register for GpifInterrupt callback?

- Since you are discarding the buffers from Dma0 and Dma1, can you make consumers for Dma0 and Dma1 as UIB_CONS_X and UIB_CONS_Y (which are not used for any other channels) and then check if you are getting Gpif Intr callback?

- Can you let me know why there are only 8 dma callbacks? (You should have many Dma callbacks before partial buffer. Isn't it?)

Regards,

Hemanth

Hemanth
0 Likes