Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/drivers/ns16550/ns16550.c

    r28a5ebd r98a935e  
    132132};
    133133
     134/** Configure ns16550 transmission format.
     135 *
     136 * @param instance   NS 16550 driver instance.
     137 * @param baud_rate  Transmission speed in bits per second, also known as baud,
     138 *                   maximum value is 115200.
     139 * @param lcr_format Line Control Register configuration bits, as defined by
     140 *                   the @c LCR_ macros.  These configure the word width,
     141 *                   parity type, and stop bit count.
     142 */
     143void ns16550_format_set(ns16550_instance_t *instance,
     144    unsigned baud_rate, uint8_t lcr_format)
     145{
     146        uint16_t divisor;
     147
     148        divisor = (uint16_t)(NS156440_CLOCK / baud_rate);
     149        if (divisor == 0)
     150                divisor = 1;  /* Avoid division by zero. */
     151
     152        ns16550_reg_write(instance, NS16550_REG_LCR, LCR_DLAB);
     153        ns16550_reg_write(instance, NS16550_REG_DLL, divisor & 0xFF);
     154        ns16550_reg_write(instance, NS16550_REG_DLH, (divisor >> 8) & 0xFF);
     155        ns16550_reg_write(instance, NS16550_REG_LCR, lcr_format & ~LCR_DLAB);
     156}
     157
    134158/** Initialize ns16550.
    135159 *
Note: See TracChangeset for help on using the changeset viewer.