This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: Problem initializing SPI with DMA

Part Number: TMS320F28388D

Hello,

I am trying to use DMA with SPI on the new F28388D control board. I based my initialization on the several examples I've been available to find.

I use the SPIB and DMA channel 5 for Tx.

Here are my initializations:

static void HAL_comSPI_init(HAL* hal)
{
    // Disable SPI before configuration
    SPI_disableModule(hal->comSpiHandle);

    // Initialize FIFO
    SPI_enableFIFO(hal->comSpiHandle);

    SPI_clearInterruptStatus(hal->comSpiHandle, SPI_INT_RXFF | SPI_INT_TXFF);
    SPI_setFIFOInterruptLevel(hal->comSpiHandle, SPI_FIFO_TX8, SPI_FIFO_RX8);

    // Set SPI configuration
    SPI_setConfig(hal->comSpiHandle, DEVICE_LSPCLK_FREQ, SPI_PROT_POL0PHA0, SPI_MODE_SLAVE, 400E3, 16);

    // Free run
    SPI_setEmulationMode(hal->comSpiHandle, SPI_EMULATION_FREE_RUN);

    // Enable SPI module
    SPI_enableModule(hal->comSpiHandle);
}

static void HAL_DMA_init(HAL* hal)
{
    // DMA initialization
    DMA_initController();

    // DMA Tx channel initialization
    DMA_configAddresses(hal->dmaTxHandle, (uint16_t*)(hal->comSpiHandle + SPI_O_TXBUF), dualSourceBuffer.comPackets);
    // Single word per burst
    DMA_configBurst(hal->dmaTxHandle, COM_LENGTH, 1, 0);
    //DMA_configTransfer(hal->dmaTxHandle, COM_LENGTH, -(COM_LENGTH - 1), 0); // TODO recheck
    DMA_configTransfer(hal->dmaTxHandle, 1, -(COM_LENGTH - 1), 0);
    // 16-bits words, no one-shot mode
    DMA_configMode(hal->dmaTxHandle, DMA_TRIGGER_SPIBTX, DMA_CFG_ONESHOT_DISABLE |
                   DMA_CFG_CONTINUOUS_DISABLE | DMA_CFG_SIZE_16BIT);

    DMA_clearTriggerFlag(hal->dmaTxHandle);
}

And later in the initialization, I call:

DMA_startChannel(hal->dmaTxHandle);

When I launch the code, this is what I see:

SPI registers:

DMA Mode register

DMA Control register

The FIFO buffer seems to somehow be filled because TXFFSTS is equal to 7 but I dont get why.

Also when I read this buffer from an external SPI master I only read zeros and the TXFFSTS is decrementing properly

Thanks in advance.

Natan