altos/telelco-v2.0: Fix button names and pin mappings. Add drag LED.
[fw/altos] / src / avr / ao_spi_usart.c
index 1996fcd9e98a9cee798aaaf3ace662c2b623924a..0d509cb77660dc23bd5894d6c88b8df1ffa0c1d5 100644 (file)
@@ -3,7 +3,8 @@
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License.
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -29,7 +30,7 @@ __xdata uint8_t       ao_spi_mutex;
  * so using interrupts would take way too long
  */
 void
-ao_spi_send(void __xdata *block, uint16_t len) __reentrant
+ao_spi_send_bus(void __xdata *block, uint16_t len) __reentrant
 {
        uint8_t *d = block;
 
@@ -43,15 +44,17 @@ ao_spi_send(void __xdata *block, uint16_t len) __reentrant
 
 /* 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
+ao_spi_recv_bus(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;