1 /*
2  * Copyright (c) 2006-2022, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date         Author      Notes
8  * 2010-12-22   onelife     Initial creation for EFM32
9  * 2011-06-27   onelife     Fix a bug when using compiler optimization
10  * 2011-07-26   onelife     Add lock (semaphore) to prevent simultaneously
11  *  access
12  * 2011-12-09   onelife     Add giant gecko support
13  * 2011-12-09   onelife     Add UART module support
14  * 2011-12-20   onelife     Change USART status format
15  */
16 
17 #ifndef __DRV_USART_H__
18 #define __DRV_USART_H__
19 
20 /* Includes ------------------------------------------------------------------*/
21 /* Exported types ------------------------------------------------------------*/
22 struct efm32_usart_int_mode_t
23 {
24     rt_uint8_t          *data_ptr;
25     rt_uint8_t          data_size;
26     rt_uint32_t         read_index, save_index;
27 };
28 
29 struct efm32_usart_dma_mode_t
30 {
31     /* DMA Channel */
32     rt_uint32_t         dma_channel;
33 
34     /* buffer info */
35     rt_uint32_t         *data_ptr;
36     rt_uint8_t          data_size;
37 };
38 
39 struct efm32_usart_device_t
40 {
41     /* Counter */
42     rt_uint32_t         counter;
43     /* Lock */
44     struct rt_semaphore *lock;
45     /* Unit number */
46     rt_uint8_t          unit;
47     /* State */
48     volatile rt_uint8_t state;
49     /*  Pointer to USART device structure */
50     USART_TypeDef       *usart_device;
51     /* Pointer to RX structure */
52     void                *rx_mode;
53     /* Pointer to TX structure */
54     void                *tx_mode;
55 };
56 
57 /* Exported constants --------------------------------------------------------*/
58 /* Exported macro ------------------------------------------------------------*/
59 #define USART_WAIT_TIME_TX          (RT_TICK_PER_SECOND / 100 * 3)
60 
61 #define USART_STATE_CONSOLE         (1 << 0)
62 #define USART_STATE_TX_BUSY         (1 << 1)
63 #define USART_STATE_RX_BUSY         (1 << 2)
64 #if defined(UART_PRESENT)
65 #define USART_STATE_ASYNC_ONLY      (1 << 3)
66 #endif
67 #define USART_STATE_SYNC            (1 << 4)
68 #define USART_STATE_MASTER          (1 << 5)
69 #define USART_STATE_AUTOCS          (1 << 6)
70 #define USART_STATE_9BIT            (1 << 7)
71 #define USART_CLK_MODE_GET(state)   ((state >> 8) & 0x03)
72 
73 #define SYNC_SETTING_MASK           (0x1F)
74 #define SYNC_SETTING_SHIFT          (5)
75 
76 /* Exported functions ------------------------------------------------------- */
77 void rt_hw_usart_init(void);
78 
79 #endif /* __DRV_USART_H__ */
80