2002-02-20 23:27:07

by Ed Vance

[permalink] [raw]
Subject: RE: Problem to use a Oxford semiconductor Intelligent DUAL Channe l UA RT (OX16PCI952)

On Fri, Feb 15, 2002 at 09:03PM, David Lawyer wrote:
> On Fri, Feb 15, 2002 at 11:17:02AM -0800, Ed Vance wrote:
> >
> > If you can find out the maximum baud rate, try adjusting the it for the
port
> > with setserial's baud_base parameter. Two common base baud rates for 95X
> > based cards are 921600 and 3125000.
>
> How does 3125000 divide to give the standard "baud" rates? I checked a
> few standard values such at 115.2k, 28.8k, etc. 3125000 is not
> divisible by them. You may have a wrong number.

Right you are. The 3125000 Hz number does not divide well for the faster
standard rates. Here's where the number came from. The oscillator value on
my 16PCI954 based card is 50.0 MHz, which is not a clean multiple of
anything. The UART is in x16 async clock mode so (without the prescaler) the
highest possible baud rate (divisor = 1) is 50.0 MHz / 16 = 3125000 Hz.

To get the standard rates above 115.2k with a 50.0 MHz clock, we must use
the 16950's CPR register (prescaler) which supports fractional scale
factors. See today's patch from [email protected], "[PATCH]
Kernel support for 16C950's CPR register". This is a better solution than
what I was using which was to initialize the CPR to create a more benign
base rate close to 921600 Hz, which is the other number I mentioned.

Thanks for noticing. I had published the version of my serial driver patch
without the CPR register initialization. oops.

Best regards,
----------------------------------------------------------------
Ed Vance [email protected]
Macrolink, Inc. 1500 N. Kellogg Dr Anaheim, CA 92807
----------------------------------------------------------------