altos: Add support for 115200 baud serial rates
authorKeith Packard <keithp@keithp.com>
Sat, 1 Dec 2012 00:03:45 +0000 (16:03 -0800)
committerKeith Packard <keithp@keithp.com>
Sat, 1 Dec 2012 00:03:45 +0000 (16:03 -0800)
Necessary for flashing skytraq chips

Signed-off-by: Keith Packard <keithp@keithp.com>
src/cc1111/ao_serial.c
src/stm/ao_serial_stm.c
src/test/ao_gps_test.c
src/test/ao_gps_test_skytraq.c

index 2a93bf523852dc98a255b0baea7a3a8f9b7111ba..8913a9b075333d1532064d5357aebd90051d7369 100644 (file)
@@ -34,8 +34,14 @@ const __code struct ao_serial_speed ao_serial_speeds[] = {
                /* .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;
@@ -116,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;
@@ -204,7 +210,7 @@ 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;
index 94138edc3f4bda884a07555584e8d0d962ca99fa..ce33f97e97416eaaf2a9eddfb54ba9f19943cb9e 100644 (file)
@@ -123,12 +123,15 @@ static const struct {
        [AO_SERIAL_SPEED_57600] = {
                AO_PCLK1 / 57600
        },
+       [AO_SERIAL_SPEED_115200] = {
+               AO_PCLK1 / 115200
+       },
 };
 
 void
 ao_usart_set_speed(struct ao_stm_usart *usart, uint8_t speed)
 {
-       if (speed > AO_SERIAL_SPEED_57600)
+       if (speed > AO_SERIAL_SPEED_115200)
                return;
        usart->reg->brr = ao_usart_speeds[speed].brr;
 }
index d75a12ecbfad77bf5a4f75d65a02a4200fd217f0..3844a3265452f623d5065f48e31b6061cdabe002 100644 (file)
@@ -88,6 +88,7 @@ ao_mutex_put(uint8_t *mutex)
 static int
 ao_gps_fd;
 
+#if 0
 static void
 ao_dbg_char(char c)
 {
@@ -103,6 +104,7 @@ ao_dbg_char(char c)
        }
        write(1, line, strlen(line));
 }
+#endif
 
 #define QUEUE_LEN      4096
 
@@ -391,6 +393,7 @@ ao_serial1_putchar(char c)
 
 #define AO_SERIAL_SPEED_4800   0
 #define AO_SERIAL_SPEED_57600  1
+#define AO_SERIAL_SPEED_115200 2
 
 static void
 ao_serial1_set_speed(uint8_t speed)
@@ -407,6 +410,9 @@ ao_serial1_set_speed(uint8_t speed)
        case AO_SERIAL_SPEED_57600:
                cfsetspeed(&termios, B57600);
                break;
+       case AO_SERIAL_SPEED_115200:
+               cfsetspeed(&termios, B115200);
+               break;
        }
        tcsetattr(fd, TCSAFLUSH, &termios);
        tcflush(fd, TCIFLUSH);
@@ -420,7 +426,6 @@ ao_serial1_set_speed(uint8_t speed)
 void
 ao_dump_state(void *wchan)
 {
-       double  lat, lon;
        int     i;
        if (wchan == &ao_gps_data)
                ao_gps_print(&ao_gps_data);
@@ -510,4 +515,5 @@ main (int argc, char **argv)
        }
        ao_gps_setup();
        ao_gps();
+       return 0;
 }
index 846daa9443825b02fc322b9ca1d6f9fe5b806d36..81008b39ebc282e6aa4682779691d6e2580528b2 100644 (file)
@@ -397,6 +397,7 @@ ao_serial1_putchar(char c)
 #define AO_SERIAL_SPEED_4800   0
 #define AO_SERIAL_SPEED_9600   1
 #define AO_SERIAL_SPEED_57600  2
+#define AO_SERIAL_SPEED_115200 3
 
 static void
 ao_serial1_set_speed(uint8_t speed)
@@ -411,11 +412,14 @@ ao_serial1_set_speed(uint8_t speed)
                cfsetspeed(&termios, B4800);
                break;
        case AO_SERIAL_SPEED_9600:
-               cfsetspeed(&termios, B38400);
+               cfsetspeed(&termios, B9600);
                break;
        case AO_SERIAL_SPEED_57600:
                cfsetspeed(&termios, B57600);
                break;
+       case AO_SERIAL_SPEED_115200:
+               cfsetspeed(&termios, B115200);
+               break;
        }
        tcsetattr(fd, TCSAFLUSH, &termios);
        tcflush(fd, TCIFLUSH);
@@ -423,6 +427,10 @@ ao_serial1_set_speed(uint8_t speed)
 
 #define ao_time() 0
 
+uint8_t        ao_task_minimize_latency;
+
+#define ao_usb_getchar()       0
+
 #include "ao_gps_print.c"
 #include "ao_gps_skytraq.c"