The NS 16450 and other compatible UART devices (including the 8250- and
16550-Series UARTs) incorporate a Programmable Baud Generator feature that
is driven as a function of the following constants:
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
CLOCK = 1843200 ; crystal frequency
CLOCK/16 = 115200 ; after divider
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Given these constants, the algorithm for determining which rates are supported
is explained in the following examples:
- If 900 bps is specified, the bit rate is exactly 900
because it divides evenly into 115200 (115200/900 = 128). Bit rate, returned
by IOCtl ASYNC_GETBAUDRATE,
is 900.
- If 901 bps is specified, the bit rate does not change,
and the IOCtl fails with an invalid parameter error because it cannot be
supported within .01% (115200/901 = 128, 115200/128 = 900, which gives a
.1111% error).
- If 907 bps is specified, the bit rate is 907.0866
because it can be supported within .01% (115200/907 = 127, 115200/127 =
907.0866, which gives a .0095% error). Bit rate, returned by ASYNC_GETBAUDRATE,
is 907.
- If 110 bps is specified, the bit rate is 110.0287,
even though the error is over .01% (115200/110 = 1047, 115200/1047 = 110.0287,
which gives a .0260% error). Bit rate, returned by ASYNC_GETBAUDRATE,
is 110.
Note: Where division is performed and the quotient is not a whole
integer, an integer result is obtained by rounding off the fractional part
of the quotient.
[Back]
[Next]