Merge remote-tracking branch 'mjb/master'
[fw/altos] / src / cc1111 / ao_spi.c
index 2b4fd186aa843b0435100d985aece4a9b3365dd7..cdef6bda9d85948bc45ec0fd3f427068c62b4560 100644 (file)
@@ -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,21 +164,23 @@ 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
-       __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_in_done)
+               ao_sleep(&ao_spi_dma_in_done);
+}
+#endif
 
 /* Receive bytes over SPI.
  *
@@ -221,11 +221,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)