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.

 

Thanks

 

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
    cfg |= ENUM_DMA_CFG_XCNT_INT;

 

    /* 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
    ctl |= ENUM_EPPI_CTL_SWAP_EN;

 

    // 32-bit DMA transfers are unpacked into 4 bytes
    ctl |= ENUM_EPPI_CTL_PACK_EN;

 

    // 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
    ctl |= ENUM_EPPI_CTL_TXMODE;

 

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

Outcomes