authorNathael Pajani <nathael.pajani@ed3l.fr>
Mon, 21 Sep 2015 15:42:57 +0000 (17:42 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Mon, 21 Sep 2015 15:42:57 +0000 (17:42 +0200)
drivers/serial.c
include/drivers/serial.h

index 098b311..075e676 100644 (file)
@@ -38,7 +38,6 @@
 #include "lib/bit_arithm.h"
 #include "drivers/serial.h"
 
-#define SERIAL_OUT_BUFF_SIZE 64
 struct uart_device
 {
        uint32_t num;
@@ -285,8 +284,8 @@ static struct uart_clk_cfg uart_clk_table[] = {
 };
 
 /* UART Clock Setup */
-/* Note : for both uarts we use full peripheral clock.
- *    With a minimum main clock of 12MHz, this gives 12MHz/16 = 750kbauds at least
+/* Note : for all modules, we use the default clock divider, which is CCLK/4.
+ *    With a minimum main clock of 48MHz, this gives 12MHz/16 = 750kbauds at least
  *    for UARTs baudrates.
  * Note : IRQ are off, whether called by system update or by UART on helper
  */
@@ -297,8 +296,8 @@ static void uart_clk_on(uint32_t uart_num, uint32_t baudrate)
        /* Save baudrate value */
        uarts[uart_num].baudrate = baudrate;
        /* Configure UART clock */
-       set_subsystem_clk_divider(uart_defs[uart_num].clk_num, LPC_PCLK_CCLK);
-       pclk = get_main_clock(); /* See above note */
+       set_subsystem_clk_divider(uart_defs[uart_num].clk_num, LPC_PCLK_CCLK_QUARTER);
+       pclk = (get_main_clock() / 4); /* See above note */
        div = (pclk / (baudrate * 16));
        /* The easy one : divider is an integer, or baudrate is low enought for the aproximation */
        if ((baudrate <= 115200) || ((div * baudrate * 16) == pclk)) {
index 61191e4..155a664 100644 (file)
 #define SERIAL_MODE_RS485 SERIAL_CAP_RS485
 #define SERIAL_MODE_IRDA  SERIAL_CAP_IRDA
 
+
+/* This buffer size is the maximum write size for a serial_printf or a uprintf call.
+ * Previously this value was 64, but it is often too short, so I set it to 96, which
+ *    should be OK for most cases. In need of a bigger write buffer, change this value
+ *    or perform multiple write calls (better).
+ */
+#define SERIAL_OUT_BUFF_SIZE 96
+
+
 /***************************************************************************** */
 /*    Serial Write
  *