Merge branch 'master' into micropeak-logging
[fw/altos] / src / cc1111 / ao_serial.c
index 00c85ff3fa268e7b31caab8fa999a4f665c02cd5..8913a9b075333d1532064d5357aebd90051d7369 100644 (file)
 
 #include "ao.h"
 
+const __code struct ao_serial_speed ao_serial_speeds[] = {
+       /* [AO_SERIAL_SPEED_4800] = */ {
+               /* .baud = */ 163,
+               /* .gcr  = */ (7 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
+       },
+       /* [AO_SERIAL_SPEED_9600] = */ {
+               /* .baud = */ 163,
+               /* .gcr  = */ (8 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
+       },
+       /* [AO_SERIAL_SPEED_19200] = */ {
+               /* .baud = */ 163,
+               /* .gcr  = */ (9 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
+       },
+       /* [AO_SERIAL_SPEED_57600] = */ {
+               /* .baud = */ 59,
+               /* .gcr =  */ (11 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
+       },
+       /* [AO_SERIAL_SPEED_115200] = */ {
+               /* .baud = */ 59,
+               /* .gcr =  */ (12 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
+       },
+};
+
+#define AO_SERIAL_SPEED_MAX    AO_SERIAL_SPEED_115200
+
 #if HAS_SERIAL_0
 
 volatile __xdata struct ao_fifo        ao_serial0_rx_fifo;
@@ -66,10 +91,10 @@ ao_serial0_getchar(void) __critical
 }
 
 #if USE_SERIAL_0_STDIN
-char
+int
 ao_serial0_pollchar(void) __critical
 {
-       char    c;
+       uint8_t c;
        if (ao_fifo_empty(ao_serial0_rx_fifo))
                return AO_READ_AGAIN;
        ao_fifo_remove(ao_serial0_rx_fifo,c);
@@ -97,7 +122,7 @@ void
 ao_serial0_set_speed(uint8_t speed)
 {
        ao_serial0_drain();
-       if (speed > AO_SERIAL_SPEED_57600)
+       if (speed > AO_SERIAL_SPEED_MAX)
                return;
        U0UCR |= UxUCR_FLUSH;
        U0BAUD = ao_serial_speeds[speed].baud;
@@ -116,7 +141,7 @@ ao_serial1_rx_isr(void) __interrupt 3
        if (!ao_fifo_full(ao_serial1_rx_fifo))
                ao_fifo_insert(ao_serial1_rx_fifo, U1DBUF);
        ao_wakeup(&ao_serial1_rx_fifo);
-#if USE_SERIAL1_STDIN
+#if USE_SERIAL_1_STDIN
        ao_wakeup(&ao_stdin_ready);
 #endif
 }
@@ -154,10 +179,10 @@ ao_serial1_getchar(void) __critical
 }
 
 #if USE_SERIAL_1_STDIN
-char
+int
 ao_serial1_pollchar(void) __critical
 {
-       char    c;
+       uint8_t c;
        if (ao_fifo_empty(ao_serial1_rx_fifo))
                return AO_READ_AGAIN;
        ao_fifo_remove(ao_serial1_rx_fifo,c);
@@ -181,30 +206,11 @@ ao_serial1_drain(void) __critical
                ao_sleep(&ao_serial1_tx_fifo);
 }
 
-const __code struct ao_serial_speed ao_serial_speeds[] = {
-       /* [AO_SERIAL_SPEED_4800] = */ {
-               /* .baud = */ 163,
-               /* .gcr  = */ (7 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
-       },
-       /* [AO_SERIAL_SPEED_9600] = */ {
-               /* .baud = */ 163,
-               /* .gcr  = */ (8 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
-       },
-       /* [AO_SERIAL_SPEED_19200] = */ {
-               /* .baud = */ 163,
-               /* .gcr  = */ (9 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
-       },
-       /* [AO_SERIAL_SPEED_57600] = */ {
-               /* .baud = */ 59,
-               /* .gcr =  */ (11 << UxGCR_BAUD_E_SHIFT) | UxGCR_ORDER_LSB
-       },
-};
-
 void
 ao_serial1_set_speed(uint8_t speed)
 {
        ao_serial1_drain();
-       if (speed > AO_SERIAL_SPEED_57600)
+       if (speed > AO_SERIAL_SPEED_MAX)
                return;
        U1UCR |= UxUCR_FLUSH;
        U1BAUD = ao_serial_speeds[speed].baud;
@@ -236,9 +242,9 @@ ao_serial_init(void)
                (P2SEL_PRI3P1_USART0 | P2SEL_PRI0P1_USART0);
 
        /* Make the USART pins be controlled by the USART */
-       P1SEL |= (1 << 2) | (1 << 3);
-#if HAS_SERIAL_0_HW_FLOW
        P1SEL |= (1 << 5) | (1 << 4);
+#if HAS_SERIAL_0_HW_FLOW
+       P1SEL |= (1 << 3) | (1 << 2);
 #endif
 #endif
 
@@ -292,7 +298,9 @@ ao_serial_init(void)
 
        /* Make the USART pins be controlled by the USART */
        P1SEL |= (1 << 6) | (1 << 7);
+#if HAS_SERIAL_1_HW_FLOW
        P1SEL |= (1 << 5) | (1 << 4);
+#endif
 #endif
 
        /* UART mode with receiver enabled */