projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Clear packet queue when starting packet master
[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 6ed708ff38faf9d09e3eb44ff13ee33aea3bc5ee..7c41042a4424026e99b0ea821c618a7b750298fe 100644
(file)
--- a/
src/avr/ao_spi_usart.c
+++ b/
src/avr/ao_spi_usart.c
@@
-29,39
+29,37
@@
__xdata uint8_t ao_spi_mutex;
* so using interrupts would take way too long
*/
void
* 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;
{
uint8_t *d = block;
- ao_mutex_get(&ao_spi_mutex);
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = *d++;
while (!(UCSR1A & (1 << RXC1)));
(void) UDR1;
}
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = *d++;
while (!(UCSR1A & (1 << RXC1)));
(void) UDR1;
}
- ao_mutex_put(&ao_spi_mutex);
}
/* 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
*/
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;
{
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;
}
while (len--) {
while (!(UCSR1A & (1 << UDRE1)));
UDR1 = 0;
while (!(UCSR1A & (1 << RXC1)));
*d++ = UDR1;
}
- ao_mutex_put(&ao_spi_mutex);
}
/*
}
/*