Since the buffer is used by the DMA, if we return early we run the
risk of having the buffer overwritten before the transfer will be
completed.
Waiting for the flush could be theorically a pessimization, but from
tests, since the typical use involves mixed reads/writes, we already
wait for the transfers to be completed, and performance are
almost the same.
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4017
38d2e660-2303-0410-9eaa-
f027e97ec537
static size_t spi_dma_write(struct KFile *fd, const void *_buf, size_t size)
{
- spi_dma_flush(fd);
SPI0_PTCR = BV(PDC_TXTDIS);
SPI0_TPR = (reg32_t)_buf;
SPI0_TCR = size;
SPI0_PTCR = BV(PDC_TXTEN);
+ spi_dma_flush(fd);
return size;
}
size_t count, total_rx = 0;
uint8_t *buf = (uint8_t *)_buf;
- spi_dma_flush(fd);
-
while (size)
{
count = MIN(size, (size_t)CONFIG_SPI_DMA_MAX_RX);