summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-10-11 16:03:04 -0600
committerKeith Packard <keithp@keithp.com>2011-10-11 16:03:04 -0600
commit06b044629951b06c7ec9b0105b89f51b2880ebd0 (patch)
treed7bebe85625736a3e59491c314449764bb713a5c
parent5d1361c95f94125cda244b4cc5e55c2fb77b680b (diff)
altos/avr: SPI mutex is now held by the caller, not the SPI driver
SPI transactions generally require a read followed by a write, with the chip select held the whole time. As a result, the SPI bus must be held across multiple transactions. To make this reliable, the caller must hold the SPI mutex, instead of the underlying SPI driver. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/avr/ao_spi_usart.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/src/avr/ao_spi_usart.c b/src/avr/ao_spi_usart.c
index 6ed708ff..1996fcd9 100644
--- a/src/avr/ao_spi_usart.c
+++ b/src/avr/ao_spi_usart.c
@@ -33,14 +33,12 @@ ao_spi_send(void __xdata *block, uint16_t len) __reentrant
{
uint8_t *d = block;
- ao_mutex_get(&ao_spi_mutex);
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = *d++;
while (!(UCSR1A & (1 << RXC1)));
(void) UDR1;
}
- ao_mutex_put(&ao_spi_mutex);
}
/* Receive bytes over SPI.
@@ -54,14 +52,12 @@ ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
{
uint8_t *d = block;
- ao_mutex_get(&ao_spi_mutex);
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = 0;
while (!(UCSR1A & (1 << RXC1)));
*d++ = UDR1;
}
- ao_mutex_put(&ao_spi_mutex);
}
/*