Third attempt to post an update...
I need to continuously receive data from a slave SPI device at a fixed rate (manually triggering won't meet the requirements).
The code below shows where I'm currently at, but this just generates 2 SPI clock pluses and that's it.
I'm assuming once SPI is configured I can configure a linked set of DMA descriptors and after a single manual start, this will run indefinately, or am I mistaken?
If someone would be willing to help out, it'd be much appreciated.
srcClock_Hz = EXAMPLE_SPI_MASTER_CLK_FREQ;
SPI_MasterGetDefaultConfig(&masterConfig);
masterConfig.sselNum = (spi_ssel_t)EXAMPLE_SPI_SSEL;
masterConfig.sselPol = (spi_spol_t)EXAMPLE_MASTER_SPI_SPOL;
masterConfig.dataWidth = kSPI_Data8Bits;
masterConfig.baudRate_Bps = 8000;
SPI_MasterInit(EXAMPLE_SPI_MASTER, &masterConfig, srcClock_Hz);
DMA_Init(EXAMPLE_DMA);
// Enable channels
DMA_EnableChannel(EXAMPLE_DMA, EXAMPLE_SPI_MASTER_TX_CHANNEL);
DMA_EnableChannel(EXAMPLE_DMA, EXAMPLE_SPI_MASTER_RX_CHANNEL);
// Set channel priorities
DMA_SetChannelPriority(EXAMPLE_DMA, EXAMPLE_SPI_MASTER_TX_CHANNEL, kDMA_ChannelPriority3);
DMA_SetChannelPriority(EXAMPLE_DMA, EXAMPLE_SPI_MASTER_RX_CHANNEL, kDMA_ChannelPriority2);
// Create channel handles
DMA_CreateHandle(&masterTxHandle, EXAMPLE_DMA, EXAMPLE_SPI_MASTER_TX_CHANNEL);
DMA_CreateHandle(&masterRxHandle, EXAMPLE_DMA, EXAMPLE_SPI_MASTER_RX_CHANNEL);
// Set channel callbacks
DMA_SetCallback(&masterTxHandle, TxCallback, NULL);
DMA_SetCallback(&masterRxHandle, RxCallback, NULL);
DMA_SetupDescriptor(
&dmaTxDescriptors[0],
DMA_CHANNEL_XFER(true, false, true, false, 1, 0, 0, 1),
&masterTxData,
(void *)&SPI7->FIFOWR,
&dmaTxDescriptors[1]);
DMA_SetupDescriptor(
&dmaTxDescriptors[1],
DMA_CHANNEL_XFER(true, false, true, false, 1, 0, 0, 1),
&masterTxData,
(void *)&SPI7->FIFOWR,
&dmaTxDescriptors[2]);
DMA_SetupDescriptor(
&dmaTxDescriptors[2],
DMA_CHANNEL_XFER(true, false, true, false, 1, 0, 0, 1),
&masterTxData,
(void *)&SPI7->FIFOWR,
&dmaTxDescriptors[0]);
DMA_PrepareChannelTransfer(&dmaChannelConfig,
&masterTxData,
(void *)&SPI7->FIFOWR,
DMA_CHANNEL_XFER(true, false, true, false, 1, 0, 0, 1),
kDMA_MemoryToPeripheral,
NULL,
// &dmaChannelTrigger,
&dmaTxDescriptors[0]
);
DMA_SubmitChannelTransfer(&masterTxHandle, &dmaChannelConfig);
DMA_StartTransfer(&masterTxHandle);