I still can't get any transfers after the first to work. I saw your comments about making sure MCD_BUF_READY is set in the descriptors, however I'm using single DMA transfers. My MCD_startDma looks like this:
MCD_startDma(dev->tx_channel, /* channel */
(s8*) virt_to_phys(dev->dtfr_buf), /* srcAddr */
4, /* srcIncr */
(s8*) &(MCF_DSPI_DTFR), /* destAddr */
0, /* destIncr */
dma_tx_size, /* dmaSize */
4, /* xferSize */
dev->tx_initiator, /* initiator */
DSPI_TX_DMA_PRI, /* priority */
MCD_SINGLE_DMA | MCD_INTERRUPT | 0x40, /* flags */
MCD_NO_BYTE_SWAP | MCD_NO_BIT_REV | MCD_NO_CSUM); /* funcDesc*/
The first transfer completes fine, and calling MCD_dmaStatus returns MCD_DONE. However, when I call MCD_startDma the second time with the same parameters, the transfer doesn't happen and MCD_dmaStatus returns MCD_IDLE. The comments in MCD_dma.h say that MCD_IDLE means "DMA active, but the initiator is currently inactive."
Any ideas on how to get that second transfer to start?
Thanks,
Steve