projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Send SPI message at flight state changes
[fw/altos]
/
src
/
ao_spi.c
diff --git
a/src/ao_spi.c
b/src/ao_spi.c
index bd52a0d45694516fa643a9d7c376ac8c68543192..fbe613c759762bc4766f8ab47e9c56362fcc2d88 100644
(file)
--- a/
src/ao_spi.c
+++ b/
src/ao_spi.c
@@
-17,6
+17,10
@@
#include "ao.h"
#include "ao.h"
+/* Shared mutex to protect SPI bus, must cover the entire
+ * operation, from CS low to CS high. This means that any SPI
+ * user must protect the SPI bus with this mutex
+ */
__xdata uint8_t ao_spi_mutex;
__xdata uint8_t ao_spi_dma_in_done;
__xdata uint8_t ao_spi_dma_out_done;
__xdata uint8_t ao_spi_mutex;
__xdata uint8_t ao_spi_dma_in_done;
__xdata uint8_t ao_spi_dma_out_done;
@@
-36,7
+40,6
@@
static __xdata uint8_t ao_spi_const = 0xff;
void
ao_spi_send(void __xdata *block, uint16_t len) __reentrant
{
void
ao_spi_send(void __xdata *block, uint16_t len) __reentrant
{
- ao_mutex_get(&ao_spi_mutex);
ao_dma_set_transfer(ao_spi_dma_in_id,
&U0DBUFXADDR,
&ao_spi_const,
ao_dma_set_transfer(ao_spi_dma_in_id,
&U0DBUFXADDR,
&ao_spi_const,
@@
-64,7
+67,6
@@
ao_spi_send(void __xdata *block, uint16_t len) __reentrant
ao_dma_trigger(ao_spi_dma_out_id);
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
ao_dma_trigger(ao_spi_dma_out_id);
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
- ao_mutex_put(&ao_spi_mutex);
}
/* Receive bytes over SPI.
}
/* Receive bytes over SPI.
@@
-76,7
+78,6
@@
ao_spi_send(void __xdata *block, uint16_t len) __reentrant
void
ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
{
void
ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
{
- ao_mutex_get(&ao_spi_mutex);
ao_dma_set_transfer(ao_spi_dma_in_id,
&U0DBUFXADDR,
block,
ao_dma_set_transfer(ao_spi_dma_in_id,
&U0DBUFXADDR,
block,
@@
-104,7
+105,6
@@
ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
ao_dma_trigger(ao_spi_dma_out_id);
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
ao_dma_trigger(ao_spi_dma_out_id);
__critical while (!ao_spi_dma_in_done)
ao_sleep(&ao_spi_dma_in_done);
- ao_mutex_put(&ao_spi_mutex);
}
/*
}
/*