projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos/avr: Clear SPI receive buffer before clocking new data in
[fw/altos]
/
src
/
avr
/
ao_spi_usart.c
diff --git
a/src/avr/ao_spi_usart.c
b/src/avr/ao_spi_usart.c
index 1996fcd9e98a9cee798aaaf3ace662c2b623924a..5ea11da6a093527a6ae96cb4caa0f8cd5ccdcaed 100644
(file)
--- a/
src/avr/ao_spi_usart.c
+++ b/
src/avr/ao_spi_usart.c
@@
-43,15
+43,17
@@
ao_spi_send(void __xdata *block, uint16_t len) __reentrant
/* Receive bytes over SPI.
*
/* Receive bytes over SPI.
*
- * This sets up tow DMA engines, one reading the data and another
- * writing constant values to the SPI transmitter as that is what
- * clocks the data coming in.
+ * Poll, sending zeros and reading data back
*/
void
ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
{
uint8_t *d = block;
*/
void
ao_spi_recv(void __xdata *block, uint16_t len) __reentrant
{
uint8_t *d = block;
+ /* Clear any pending data */
+ while (UCSR1A & (1 << RXC1))
+ (void) UDR1;
+
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = 0;
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = 0;