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?