#include "ao.h"
-#define SERIAL_FIFO 32
-
-struct ao_fifo {
- uint8_t insert;
- uint8_t remove;
- uint8_t fifo[SERIAL_FIFO];
-};
-
volatile __xdata struct ao_fifo ao_usart1_rx_fifo;
volatile __xdata struct ao_fifo ao_usart1_tx_fifo;
-#define ao_fifo_insert(f,c) do { \
- (f).fifo[(f).insert] = (c); \
- (f).insert = ((f).insert + 1) & (SERIAL_FIFO-1); \
-} while(0)
-
-#define ao_fifo_remove(f,c) do {\
- c = (f).fifo[(f).remove]; \
- (f).remove = ((f).remove + 1) & (SERIAL_FIFO-1); \
-} while(0)
-
-#define ao_fifo_full(f) ((((f).insert + 1) & (SERIAL_FIFO-1)) == (f).remove)
-#define ao_fifo_empty(f) ((f).insert == (f).remove)
-
void
ao_serial_rx1_isr(void) interrupt 3
{
ao_wakeup(&ao_usart1_tx_fifo);
}
-uint8_t
+char
ao_serial_getchar(void) __critical
{
- uint8_t c;
+ char c;
while (ao_fifo_empty(ao_usart1_rx_fifo))
ao_sleep(&ao_usart1_rx_fifo);
ao_fifo_remove(ao_usart1_rx_fifo, c);
}
void
-ao_serial_putchar(uint8_t c) __critical
+ao_serial_putchar(char c) __critical
{
while (ao_fifo_full(ao_usart1_tx_fifo))
ao_sleep(&ao_usart1_tx_fifo);
}
__code struct ao_cmds ao_serial_cmds[] = {
- { 'S', send_serial, "S<data> Send data to serial line\n" },
+ { 'S', send_serial, "S <data> Send data to serial line" },
{ 0, send_serial, NULL },
};