[U-Boot-Users] U-Boot-Users Digest, Vol 13, Issue 69

Vaibhav Hiremath hvaibhav at gmail.com
Thu Jun 21 12:03:21 CEST 2007


Hi All,

I am working with ARM1176 core, and using standard serial driver NS16550.
I found one bug in to this function -

The driver doesn't work with baudrate 57600, I debuged this issue and find
that small modification is required in function "calc_divisor" -
Below is complete function -

CFG_NS16550_CLK = 10000000
MODE_X_DIV=16
static int calc_divisor (NS16550_t port)
{
        unsigned int baudrate_div;
#ifdef CONFIG_OMAP1510
        /* If can't cleanly clock 115200 set div to 1 */
        if ((CFG_NS16550_CLK == 12000000) && (gd->baudrate == 115200)) {
                port->osc_12m_sel = OSC_12M_SEL;        /* enable 6.5 *
divisor */
                return (1);                             /* return 1 for base
divisor */
        }
        port->osc_12m_sel = 0;                  /* clear if previsouly set
*/
#endif
#ifdef CONFIG_OMAP1610
        /* If can't cleanly clock 115200 set div to 1 */
        if ((CFG_NS16550_CLK == 48000000) && (gd->baudrate == 115200)) {
                return (26);            /* return 26 for base divisor */
        }
#endif

#ifdef CONFIG_APTIX
#define MODE_X_DIV 13
#else
#define MODE_X_DIV 16
#endif
        baudrate_div = (CFG_NS16550_CLK / gd->baudrate);
        if ((baudrate_div%MODE_X_DIV)>7)
                baudrate_div+=8;
        baudrate_div/=MODE_X_DIV;

        return baudrate_div;

}

I have tested with baudrates 9600, 19200, 38400 and 57600. it's working
perfectly fine.

Am I on correct path? Please let me know if I am missing something.

Thanks,

Vaibhav
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.denx.de/pipermail/u-boot/attachments/20070621/ad00b6b7/attachment.htm 


More information about the U-Boot mailing list