AnsweredAssumed Answered

YFIFO error on EPPI transfers

Question asked by verysmallbits on May 3, 2017
Latest reply on May 24, 2017 by Jithul_Janardhanan

I continue to see the YFIFOERROR bit set indicating a FIFO overflow.


I'm using a 32 x 4 = 128 byte DMA data buffer.


My MSIZE is set to 4 bytes (my underestanding is that it must be 4 bytes)


However I'm wondering whether PSIZE needs to be 4 bytes, i.e. the same as the memory size or 1 byte, which is what i'm actually transferring out the EPPI.


Regardless i've tried 1 byte and 4 bytes for PSIZE and in either case I get the YFIFOERROR bit set.  I'm only making exactly 1 transfer.  And yes, i'm making sure the error flag is clear before starting(since it's a sticky bit).


My understanding is that the FIFO is 128 bytes deep so it's not at all obvious how I could be overflowing it on a single transfer of 128 bytes.




register settings just before start:


DMA14 STAT 0x00006000
DMA14 START ADDR 0x11b01dec
DMA14 START ADDR 0x11b01dec
DMA14 ADDR CUR 0000000000
DMA14 XCNT 0x00000010
DMA14 XMOD 0x00000004
DMA14 DESCR CUR 0000000000
REG EPPI CTL=0x00c0000e
REG EPPI STAT=0000000000


Set-up code


--- DMA set-up

    cfg |= ENUM_DMA_CFG_MSIZE04;
    // but what are EPPI transfers ??
    // cfg |= ENUM_DMA_CFG_PSIZE04;
    cfg |= ENUM_DMA_CFG_PSIZE01;


    // trig when X count reaches 0
    // cfg |= ENUM_DMA_CFG_XCNT_TRIG;


    // raise an interrupt when X count expires


    /* STOP mode. Stop at the end of this work unit.
    cfg |= ENUM_DMA_CFG_STOP;


---- the eppi set-up

    ctl = 0x0;
    *pREG_EPPI_CTL = ctl;


    // MSBytes go out first


    // 32-bit DMA transfers are unpacked into 4 bytes


    // 0 already selects 8-bit length, this is added to document.
    ctl |= ENUM_EPPI_CTL_DLEN08;


    // transfer type is GP 0 (stands for General Purpose ?) mode
    ctl |= ENUM_EPPI_CTL_NON656;


    // transmit mode


    // Notice that the EPPI has not been enabled yet.
    *pREG_EPPI_CTL = ctl;