Hi David,
Thank you for the workaround. I was wondering if it's the rignt way to set the TCD because I have to call EDMA_TcdDisableInterrupts() in order to clear the INTMAJOR previously enabled by EDMA_SubmitTransfer() ?
edma_handle_t g_EDMA_Handle;
EDMA_GetDefaultConfig(&userConfig);
EDMA_Init(DMA0, &userConfig);
EDMA_CreateHandle(&g_EDMA_Handle, DMA0, 0);
{
edma_tcd_t *tcdRegs;
tcdRegs = (edma_tcd_t *)(&g_EDMA_Handle.base->TCD[g_EDMA_Handle.channel]);
tcdRegs->SLAST = -sizeof(SPI_data_patterns);
}
EDMA_PrepareTransfer(&transferConfig, SPI_data_patterns, sizeof(SPI_data_patterns[0]),
(void *)&SPI0->PUSHR, sizeof(SPI0->PUSHR),
sizeof(SPI_data_patterns[0]), sizeof(SPI_data_patterns),
kEDMA_MemoryToPeripheral);
EDMA_SubmitTransfer(&g_EDMA_Handle, &transferConfig);
/*Disable TCD[n].CSR.INTMAJOR because it has been previously set by EDMA_SubmitTransfer(),
and the corresponding NVIC interrupt is still enabled by EDMA_CreateHandle()*/
EDMA_TcdDisableInterrupts((edma_tcd_t *)(&g_EDMA_Handle.base->TCD[g_EDMA_Handle.channel]),
(uint32_t)(kEDMA_MajorInterruptEnable));
for(;;){
wait20ms();
EDMA_StartTransfer(&g_EDMA_Handle);
/* Wait for SPI0 finish */
while (!(DSPI_GetStatusFlags(SPI0) & kDSPI_EndOfQueueFlag))
{
}
...
}
Best regards,
Pat