1 /*
2  * Copyright (c) 2006-2025 RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2025-05-28     ZhangJing    Porting to ultrarisc dp1000
9  */
10 
11 #ifndef __DRV_UART_H__
12 #define __DRV_UART_H__
13 
14 #include "riscv_io.h"
15 
16 /**
17  * uart ns16550a
18  * http://byterunner.com/16550.html
19  */
20 
21 /* TRANSMIT AND RECEIVE HOLDING REGISTER */
22 #define UART_RHR 0
23 #define UART_THR 0
24 
25 /* INTERRUPT ENABLE REGISTER */
26 #define UART_IER 1
27 #define UART_IER_RX_ENABLE (1 << 0)
28 #define UART_IER_TX_ENABLE (1 << 1)
29 
30 /* FIFO CONTROL REGISTER */
31 #define UART_FCR 2
32 #define UART_FCR_FIFO_ENABLE (1 << 0)
33 #define UART_FCR_FIFO_CLEAR (3 << 1)
34 
35 /* INTERRUPT STATUS REGISTER */
36 #define UART_ISR 2
37 
38 /* LINE CONTROL REGISTER */
39 #define UART_LCR 3
40 #define UART_LCR_EIGHT_BITS (3 << 0)
41 /* special mode to set baud rate */
42 #define UART_LCR_BAUD_LATCH (1 << 7)
43 
44 /* LINE STATUS REGISTER */
45 #define UART_LSR 5
46 /* input is waiting to be read from RHR */
47 #define UART_LSR_RX_READY (1 << 0)
48 /* THR can accept another character to send */
49 #define UART_LSR_TX_IDLE (1 << 5)
50 
51 /*#define UART_REFERENCE_CLOCK  1843200
52 #define UART_DEFAULT_BAUDRATE 115200*/
53 
54 extern void *uart0_base;
55 
56 
57 void rt_hw_uart_start_rx_thread();
58 int rt_hw_uart_init(void);
59 void drv_uart_puts(char *str); /* for syscall */
60 
61 #endif /* __DRV_UART_H__ */