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.

TM4C1294KCPDT: Problem aquiring data from ADS8900, part 2

Part Number: TM4C1294KCPDT

As I mentioned in previous topic, I am able to generate periodic requests for AD8900 for reading data. This is how it looks like on a scope:

No I want to read this data via uDMA, 4100 samples, 3 bytes each, So I programmed another uDMA channel for it:

Initialization:

    uDMAChannelAttributeDisable(UDMA_CHANNEL_SSI1RX, UDMA_ATTR_ALTSELECT | UDMA_ATTR_HIGH_PRIORITY |
                                UDMA_ATTR_REQMASK);
    uDMAChannelControlSet(UDMA_CHANNEL_SSI1RX | UDMA_PRI_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1024);
    uDMAChannelTransferSet(UDMA_CHANNEL_SSI1RX | UDMA_PRI_SELECT, UDMA_MODE_PINGPONG,
                           (void *)(SSI1_BASE + SSI_O_DR), (void *)ADCData1, 4100 * 3);
    uDMAChannelControlSet(UDMA_CHANNEL_SSI1RX | UDMA_ALT_SELECT, UDMA_SIZE_8 | UDMA_SRC_INC_NONE | UDMA_DST_INC_8 | UDMA_ARB_1024);
    uDMAChannelTransferSet(UDMA_CHANNEL_SSI1RX | UDMA_ALT_SELECT, UDMA_MODE_PINGPONG,
                           (void *)(SSI1_BASE + SSI_O_DR), (void *)ADCData2, 4100 * 3);
    uDMAChannelEnable(UDMA_CHANNEL_SSI1RX);

ISR:

void SSIDoneInt()
{
    SSIIntClear(SSI1_BASE, SSI_DMARX);
    uDMAChannelTransferSet(UDMA_CHANNEL_SSI1RX | UDMA_PRI_SELECT, UDMA_MODE_PINGPONG,
                           (void *)(SSI1_BASE + SSI_O_DR), (void *)ADCData1, 4100 * 3);
    uDMAChannelTransferSet(UDMA_CHANNEL_SSI1RX | UDMA_ALT_SELECT, UDMA_MODE_PINGPONG,
                           (void *)(SSI1_BASE + SSI_O_DR), (void *)ADCData2, 4100 * 3);
    uDMAChannelEnable(UDMA_CHANNEL_SSI1RX);
}

The problem is I hit a breakpoint in the ISR periodically, the SSI status shows no overrun conditions, but ADCData* arrays contains all zeroes.

What is wrong?

  • Hello Oleg,

    Your transfer size setting is too large. The uDMA does not support transfer sizes of greater than 1024 bytes and you are setting it to be 12300 bytes with the uDMAChannelTransferSet API.

    You will need to set the uDMA transfer size to 1024 and then keep track of your transfer in the ISR to understand how much data has been received.