Merge pull request #3897 from haukepetersen/opt_l1_baudcalc

cpu/stm32l1: optimized baudrate calculation
This commit is contained in:
Peter Kietzmann 2015-09-29 23:41:27 +02:00
commit 076cbb6c15

View File

@ -98,8 +98,7 @@ int uart_init_blocking(uart_t uart, uint32_t baudrate)
uint32_t tx_pin = 0; uint32_t tx_pin = 0;
uint32_t rx_pin = 0; uint32_t rx_pin = 0;
uint8_t af = 0; uint8_t af = 0;
float clk = 0; uint32_t clk = 0;
float divider;
uint16_t mantissa; uint16_t mantissa;
uint8_t fraction; uint8_t fraction;
@ -166,9 +165,9 @@ int uart_init_blocking(uart_t uart, uint32_t baudrate)
} }
/* uart_configure UART to mode 8N1 with given baudrate */ /* uart_configure UART to mode 8N1 with given baudrate */
divider = clk / (16 * baudrate); clk /= baudrate;
mantissa = (uint16_t)divider; mantissa = (uint16_t)(clk / 16);
fraction = (uint8_t)((divider - mantissa) * 16); fraction = (uint8_t)(clk - (mantissa * 16));
dev->BRR = ((mantissa & 0x0fff) << 4) | (0x0f & fraction); dev->BRR = ((mantissa & 0x0fff) << 4) | (0x0f & fraction);
/* enable receive and transmit mode */ /* enable receive and transmit mode */