From 1a7d2faf76a46271532102e217c2dd5515e38b72 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Wed, 29 Aug 2012 11:16:42 -0700 Subject: [PATCH] altos: Wait for IN dma complete on slave SPI send SPI send double buffered, so the DMA completes one byte too early. Use the recv DMA to know when the SPI transfer is complete. Signed-off-by: Keith Packard --- src/cc1111/ao_spi.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/cc1111/ao_spi.c b/src/cc1111/ao_spi.c index 39d459f1..cdef6bda 100644 --- a/src/cc1111/ao_spi.c +++ b/src/cc1111/ao_spi.c @@ -143,7 +143,6 @@ static __xdata uint8_t ao_spi_const; void ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant { -#if !AO_SPI_SLAVE ao_dma_set_transfer(ao_spi_dma_in_id, &SPI_BUF, &ao_spi_const, @@ -154,7 +153,6 @@ ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant DMA_CFG1_SRCINC_0 | DMA_CFG1_DESTINC_0 | DMA_CFG1_PRIORITY_NORMAL); -#endif ao_dma_set_transfer(ao_spi_dma_out_id, block, &SPI_BUF, @@ -166,9 +164,7 @@ ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant DMA_CFG1_DESTINC_0 | DMA_CFG1_PRIORITY_NORMAL); -#if !AO_SPI_SLAVE ao_dma_start(ao_spi_dma_in_id); -#endif ao_dma_start(ao_spi_dma_out_id); ao_dma_trigger(ao_spi_dma_out_id); #if !AO_SPI_SLAVE @@ -181,8 +177,8 @@ ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant void ao_spi_send_wait(void) { - __critical while (!ao_spi_dma_out_done) - ao_sleep(&ao_spi_dma_out_done); + __critical while (!ao_spi_dma_in_done) + ao_sleep(&ao_spi_dma_in_done); } #endif -- 2.30.2