summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-08-29 11:16:42 -0700
committerKeith Packard <keithp@keithp.com>2012-08-29 11:16:42 -0700
commit1a7d2faf76a46271532102e217c2dd5515e38b72 (patch)
tree008fcf5a8b3d5180c8b7688eb168a428fb705936 /src
parent98f65994ee547feb8cca63ff4ed0fefd3fb2d37d (diff)
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 <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/cc1111/ao_spi.c8
1 files 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