summaryrefslogtreecommitdiff
path: root/src/cc1111/ao_spi.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2012-08-28 18:13:02 -0700
committerKeith Packard <keithp@keithp.com>2012-08-28 23:00:23 -0700
commitfc9841ee5e92318471b6bec09b7075a788ab8872 (patch)
tree021ff2c2e1f5844c11692878184a9746e3faec97 /src/cc1111/ao_spi.c
parent27a879b4069ccedf8bbe39d7dbecf45000f29d8c (diff)
altos: Mostly working SPI radio link
This includes long delays to avoid overrunning the cc1111 input, otherwise it works pretty well. The delays mean that we can't capture the reply to a cmac command though, so more work is needed. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/cc1111/ao_spi.c')
-rw-r--r--src/cc1111/ao_spi.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/cc1111/ao_spi.c b/src/cc1111/ao_spi.c
index 2b4fd186..39d459f1 100644
--- a/src/cc1111/ao_spi.c
+++ b/src/cc1111/ao_spi.c
@@ -171,16 +171,20 @@ ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant
#endif
ao_dma_start(ao_spi_dma_out_id);
ao_dma_trigger(ao_spi_dma_out_id);
-#if AO_SPI_SLAVE
- __critical while (!ao_spi_dma_out_done)
- ao_sleep(&ao_spi_dma_out_done);
-#else
+#if !AO_SPI_SLAVE
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
#endif
}
-
+#if AO_SPI_SLAVE
+void
+ao_spi_send_wait(void)
+{
+ __critical while (!ao_spi_dma_out_done)
+ ao_sleep(&ao_spi_dma_out_done);
+}
+#endif
/* Receive bytes over SPI.
*
@@ -221,11 +225,19 @@ ao_spi_recv_bus(void __xdata *block, uint16_t len) __reentrant
#if !AO_SPI_SLAVE
ao_dma_start(ao_spi_dma_out_id);
ao_dma_trigger(ao_spi_dma_out_id);
-#endif
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
+#endif
}
+#if AO_SPI_SLAVE
+void
+ao_spi_recv_wait(void)
+{
+ __critical while (!ao_spi_dma_in_done)
+ ao_sleep(&ao_spi_dma_in_done);
+}
+#endif
void
ao_spi_init(void)