diff options
| author | Keith Packard <keithp@keithp.com> | 2011-10-11 16:03:04 -0600 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-10-11 16:03:04 -0600 | 
| commit | 06b044629951b06c7ec9b0105b89f51b2880ebd0 (patch) | |
| tree | d7bebe85625736a3e59491c314449764bb713a5c /src | |
| parent | 5d1361c95f94125cda244b4cc5e55c2fb77b680b (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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/avr/ao_spi_usart.c | 4 | 
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);  }  /*  | 
