Timer 3 working with slower clock and all 16 bits.
[fw/altos] / src / avr / ao_spi_usart.c
index 6ed708ff38faf9d09e3eb44ff13ee33aea3bc5ee..7c41042a4424026e99b0ea821c618a7b750298fe 100644 (file)
@@ -29,39 +29,37 @@ __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;
 
-       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.
  *
- * 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;
 
-       ao_mutex_get(&ao_spi_mutex);
+       /* Clear any pending data */
+       while (UCSR1A & (1 << RXC1))
+               (void) UDR1;
+       
        while (len--) {
                while (!(UCSR1A & (1 << UDRE1)));
                UDR1 = 0;
                while (!(UCSR1A & (1 << RXC1)));
                *d++ = UDR1;
        }
-       ao_mutex_put(&ao_spi_mutex);
 }
 
 /*