Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
15 years ago

SG-DMA descriptor chain not working.

Hi everyone,

I'm doing SG-DMA for streaming data to LCD.

This is how I do,

SG-DMA memory-to-stream SOPC connection.

{

descriptor read and write-->DDR-SDRAM

read data -->DDR-SDRAM

}

created descriptor using malloc.

descriptor 0:

current descriptor pointer: descriptor[0]

next descriptor pointer: descriptor[1]

SOP(start of package) = 1

EOP(end of package) = 0

descriptor 1:

current descriptor pointer: descriptor[1]

next descriptor pointer: descriptor[0]

SOP(start of package) = 0

EOP(end of package) = 1

PARK MODE ENABLE

so this configuration should introduce a loop chain for the descriptor. However its not working unless i put the loop only inside 1 descriptor(current descriptor pointer: descriptor[0]

next descriptor pointer: descriptor[0]).

I just want to make the data stream continuous base on this 2 descriptor. Is it I lost something??

Thanks for any reply. :o

3 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Additional info from my question:

    descriptor(0)

    current_descriptor : descriptor[0]

    next_descriptor : descriptor[1]

    descriptor(1)

    current_descriptor : descriptor[1]

    next_descriptor : descriptor[2]

    descriptor(2)

    current_descriptor : descriptor[2]

    next_descriptor : descriptor[2]

    *if I create descriptor above, the data keep looping sending descriptor(2),

    *if I change next_descriptor(2) like below to get a loop,

    descriptor(2)

    current_descriptor : descriptor[2]

    next_descriptor : descriptor[0]

    *this one will cause the sgdma stop sending continuous data stream.

    :confused:
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    additional info:

    DDR(150MHz) -> SG-DMA (100MHz) -> VSYNC DRIVER(100MHz)

    SGDMA send 32bits,RGB converter convert it to 24 bits per 1 cycle, and the sync driver covert the 24 bits and send 8 bits for 3 times.