Simple 16C550 UART chip driver.
More...
|
| UartRegs |
| 16C550 UART registers
|
| UartOuts |
| Output pins controlled by the MCR UART register.
|
| UartIns |
| Input pins readed in the MSR UART register.
|
|
#define | UART_BASE 0xA130C1 |
| 16C550 UART base address
|
#define | UART_CLK 24000000LU |
| Clock applied to 16C550 chip. Currently using 24 MHz crystal.
|
#define | UART_BR 1500000LU |
#define | UART_TX_FIFO_LEN 16 |
| Length of the TX FIFO in bytes.
|
#define | DivWithRounding(dividend, divisor) |
| Division with one bit rounding, useful for divisor calculations.
|
#define | UART_DLM_VAL (DivWithRounding(UART_CLK, 16 * UART_BR)>>8) |
| Value to load on the UART divisor, high byte.
|
#define | UART_DLL_VAL (DivWithRounding(UART_CLK, 16 * UART_BR) & 0xFF) |
| Value to load on the UART divisor, low byte.
|
#define | uart_tx_ready() |
| Checks if UART transmit register/FIFO is ready. In FIFO mode, up to 16 characters can be loaded each time transmitter is ready.
|
#define | uart_rx_ready() |
| Checks if UART receive register/FIFO has data available.
|
#define | uart_putc(c) |
| Sends a character. Please make sure there is room in the transmit register/FIFO by calling uart_rx_ready() before using this function.
|
#define | uart_getc() |
| Returns a received character. Please make sure data is available by calling uart_rx_ready() before using this function.
|
#define | uart_set(reg, val) |
| Sets a value in IER, FCR, LCR or MCR register.
|
#define | uart_get(reg) |
| Gets value of IER, FCR, LCR or MCR register.
|
#define | uart_set_bits(reg, val) |
| Sets bits in IER, FCR, LCR or MCR register.
|
#define | uart_clr_bits(reg, val) |
| Clears bits in IER, FCR, LCR or MCR register.
|
#define | uart_reset_fifos() |
| Reset TX and RX FIFOs.
|
#define | uart_test(reg, val) |
| Test Connection with registers.
|
|
void | uart_init (void) |
| Initializes the driver. The baud rate is set to UART_BR, and the UART FIFOs are enabled. This function must be called before using any other API call.
|
|
UartShadow | sh |
| Uart shadow registers. Do NOT access directly!
|
Simple 16C550 UART chip driver.
- Author
- Jesus Alonso (doragasu)
- Date
- 2016
◆ DivWithRounding
#define DivWithRounding |
( |
| dividend, |
|
|
| divisor ) |
Value:((((dividend)*2/(divisor))+1)/2)
Division with one bit rounding, useful for divisor calculations.
◆ UART_BR
#define UART_BR 1500000LU |
Desired baud rate. Maximum achievable baudrate with 24 MHz crystal is 24000000/16 = 1.5 Mbps
◆ uart_clr_bits
#define uart_clr_bits |
( |
| reg, |
|
|
| val ) |
Value:
UART_##reg =
sh.reg;}
while(0)
UartShadow sh
Uart shadow registers. Do NOT access directly!
Clears bits in IER, FCR, LCR or MCR register.
- Parameters
-
[in] | reg | Register to modify (IER, FCR, LCR or MCR). |
[in] | val | Bits set in val, will be cleared in reg register. |
◆ uart_get
Value:
Gets value of IER, FCR, LCR or MCR register.
- Parameters
-
[in] | reg | Register to read (IER, FCR, LCR or MCR). |
- Returns
- The value of the requested register.
◆ uart_getc
Value:
#define UART_RHR
Receiver holding register. Read only.
Definition 16c550.h:48
Returns a received character. Please make sure data is available by calling uart_rx_ready() before using this function.
- Returns
- Received character.
◆ uart_putc
Value:
Sends a character. Please make sure there is room in the transmit register/FIFO by calling uart_rx_ready() before using this function.
- Returns
- Received character.
◆ uart_reset_fifos
#define uart_reset_fifos |
( |
| ) |
|
Value:
#define uart_set_bits(reg, val)
Sets bits in IER, FCR, LCR or MCR register.
Definition 16c550.h:160
Reset TX and RX FIFOs.
◆ uart_rx_ready
#define uart_rx_ready |
( |
| ) |
|
Value:
#define UART_LSR
Line status register. Read only.
Definition 16c550.h:62
Checks if UART receive register/FIFO has data available.
- Returns
- TRUE if at least 1 byte is available, FALSE otherwise.
◆ uart_set
#define uart_set |
( |
| reg, |
|
|
| val ) |
Value:do{
sh.reg = (val);UART_##reg = (val);}
while(0)
Sets a value in IER, FCR, LCR or MCR register.
- Parameters
-
[in] | reg | Register to modify (IER, FCR, LCR or MCR). |
[in] | val | Value to set in IER, FCR, LCR or MCR register. |
◆ uart_set_bits
#define uart_set_bits |
( |
| reg, |
|
|
| val ) |
Value:
UART_##reg =
sh.reg;}
while(0)
Sets bits in IER, FCR, LCR or MCR register.
- Parameters
-
[in] | reg | Register to modify (IER, FCR, LCR or MCR). |
[in] | val | Bits set in val, will be set in reg register. |
◆ uart_test
#define uart_test |
( |
| reg, |
|
|
| val ) |
Value: reg = val; \
@ MW_ERR
General error.
Definition megawifi.h:76
Test Connection with registers.
- Parameters
-
[in] | reg | Register to modify |
[in] | val | Bits set in val, will be readed from reg register. |
◆ uart_tx_ready
#define uart_tx_ready |
( |
| ) |
|
Value:
Checks if UART transmit register/FIFO is ready. In FIFO mode, up to 16 characters can be loaded each time transmitter is ready.
- Returns
- TRUE if transmitter is ready, FALSE otherwise.