From aae08071a70ead6cf550921fbad399f0d7d796d2 Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Tue, 6 Sep 2011 14:09:26 +0200 Subject: [PATCH] Round the returned baudrate in ftdi_to_clkbits and adjust the changed values in test/baurate.cpp --- src/ftdi.c | 6 +++++- test/baudrate.cpp | 13 +++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/ftdi.c b/src/ftdi.c index a2337ed..fba5288 100644 --- a/src/ftdi.c +++ b/src/ftdi.c @@ -1112,7 +1112,11 @@ static int ftdi_to_clkbits(int baudrate, unsigned int clk, int clk_div, unsigned best_divisor = divisor/2; if(best_divisor > 0x20000) best_divisor = 0x1ffff; - best_baud = clk*8/clk_div/best_divisor; + best_baud = clk*16/clk_div/best_divisor; + if (best_baud & 1) /* Decide if to round up or down*/ + best_baud = best_baud /2 +1; + else + best_baud = best_baud /2; *encoded_divisor = (best_divisor >> 3) | (frac_code[best_divisor & 0x7] << 14); } return best_baud; diff --git a/test/baudrate.cpp b/test/baudrate.cpp index 248b4a6..b7d0282 100644 --- a/test/baudrate.cpp +++ b/test/baudrate.cpp @@ -160,6 +160,7 @@ BOOST_AUTO_TEST_CASE(TypeBMFixedBaudrates) map baudrates; baudrates[183] = calc_result(183, 16383, 7, 48); + baudrates[184] = calc_result(184, 16304, 4, 48); baudrates[300] = calc_result(300, 10000, 0, 48); baudrates[600] = calc_result(600, 5000, 0, 48); baudrates[1200] = calc_result(1200, 2500, 0, 48); @@ -168,14 +169,14 @@ BOOST_AUTO_TEST_CASE(TypeBMFixedBaudrates) baudrates[9600] = calc_result(9600, 312, 1, 48); baudrates[19200] = calc_result(19200, 156, 2, 48); baudrates[38400] = calc_result(38400, 78, 3, 48); - baudrates[57600] = calc_result(57553, 52, 3, 48); - baudrates[115200] = calc_result(115384, 26, 0, 48); + baudrates[57600] = calc_result(57554, 52, 3, 48); + baudrates[115200] = calc_result(115385, 26, 0, 48); baudrates[230400] = calc_result(230769, 13, 0, 48); baudrates[460800] = calc_result(461538, 6, 1, 48); - baudrates[921600] = calc_result(923076, 3, 2, 48); + baudrates[921600] = calc_result(923077, 3, 2, 48); baudrates[1000000] = calc_result(1000000, 3, 0, 48); baudrates[1050000] = calc_result(1043478, 2, 7, 48); - baudrates[1400000] = calc_result(1411764, 2, 3, 48); + baudrates[1400000] = calc_result(1411765, 2, 3, 48); baudrates[1500000] = calc_result(1500000, 2, 0, 48); baudrates[2000000] = calc_result(2000000, 1, 0, 48); baudrates[3000000] = calc_result(3000000, 0, 0, 48); @@ -207,9 +208,9 @@ BOOST_AUTO_TEST_CASE(TypeHFixedBaudrates) baudrates[38400] = calc_result(38400, 312, 1, 120); baudrates[57600] = calc_result(57588, 208, 4, 120); baudrates[115200] = calc_result(115246, 104, 3, 120); - baudrates[230400] = calc_result(230215, 52, 3, 120); + baudrates[230400] = calc_result(230216, 52, 3, 120); baudrates[460800] = calc_result(461538, 26, 0, 120); - baudrates[921600] = calc_result(923076, 13, 0, 120); + baudrates[921600] = calc_result(923077, 13, 0, 120); baudrates[1000000] = calc_result(1000000, 12, 0, 120); baudrates[1000000] = calc_result(1000000, 12, 0, 120); baudrates[6000000] = calc_result(6000000, 2, 0, 120); -- 1.7.1