From: Keith Packard Date: Wed, 29 Aug 2012 18:16:42 +0000 (-0700) Subject: altos: Wait for IN dma complete on slave SPI send X-Git-Tag: 1.1~53 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=1a7d2faf76a46271532102e217c2dd5515e38b72 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 --- 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