1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2006-03-13     Bernard      first version
9  * 2011-05-15     lgnq         modified according bernard's implementaion.
10  */
11 
12 #ifndef __RT_HW_SERIAL_H__
13 #define __RT_HW_SERIAL_H__
14 
15 #include <rthw.h>
16 #include <rtthread.h>
17 
18 #include "board.h"
19 
20 #define SMR_SOE          0x01U
21 #define SMR_BDS          0x04U
22 #define SMR_SBL          0x08U
23 #define SMR_WUCR         0x10U
24 #define SMR_MD_UART      0x00U
25 #define SMR_MD_UART_MP   0x20U
26 #define SMR_MD_SIO       0x40U
27 #define SMR_MD_LIN       0x60U
28 #define SMR_MD_I2C       0x80U
29 
30 #define SCR_TXE          0x01U
31 #define SCR_RXE          0x02U
32 #define SCR_TBIE         0x04U
33 #define SCR_TIE          0x08U
34 #define SCR_RIE          0x10U
35 #define SCR_UPGL         0x80U
36 
37 #define SSR_TBI          0x01U
38 #define SSR_TDRE         0x02U
39 #define SSR_RDRF         0x04U
40 #define SSR_ORE          0x08U
41 #define SSR_FRE          0x10U
42 #define SSR_PE           0x20U
43 #define SSR_REC          0x80U
44 
45 #define ESCR_P           0x08U
46 #define ESCR_PEN         0x10U
47 #define ESCR_INV         0x20U
48 #define ESCR_ESBL        0x40U
49 #define ESCR_FLWEN       0x80U
50 #define ESCR_DATABITS_8  0x00U
51 #define ESCR_DATABITS_5  0x01U
52 #define ESCR_DATABITS_6  0x02U
53 #define ESCR_DATABITS_7  0x03U
54 #define ESCR_DATABITS_9  0x04U
55 
56 #define BPS                 115200  /* serial baudrate */
57 
58 #define UART_RX_BUFFER_SIZE     128
59 #define UART_TX_BUFFER_SIZE     128
60 
61 struct serial_int_rx
62 {
63     rt_uint8_t  rx_buffer[UART_RX_BUFFER_SIZE];
64     rt_uint32_t read_index, save_index;
65 };
66 
67 struct serial_int_tx
68 {
69     rt_uint8_t  tx_buffer[UART_TX_BUFFER_SIZE];
70     rt_uint32_t write_index, save_index;
71 };
72 
73 /*
74  *  Enable/DISABLE Interrupt Controller
75  */
76 /* deviation from MISRA-C:2004 Rule 19.7 */
77 #define UART_ENABLE_IRQ(n)            NVIC_EnableIRQ((n))
78 #define UART_DISABLE_IRQ(n)           NVIC_DisableIRQ((n))
79 
80 struct serial_device
81 {
82     FM4_MFS_TypeDef* uart_device;
83     /* irq number */
84     IRQn_Type rx_irq;
85     IRQn_Type tx_irq;
86 
87     /* rx structure */
88     struct serial_int_rx* int_rx;
89     /* tx structure */
90     struct serial_int_tx* int_tx;
91 };
92 
93 void rt_hw_fujitsu_serial_isr(rt_device_t device);
94 void rt_hw_serial_init(void);
95 
96 #endif
97