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  * 2011-12-09   onelife     Initial creation for EFM32
9  */
10 
11 #ifndef __DRV_LEUSART_H__
12 #define __DRV_LEUSART_H__
13 
14 /* Includes ------------------------------------------------------------------*/
15 /* Exported types ------------------------------------------------------------*/
16 struct efm32_leuart_int_mode_t
17 {
18     rt_uint8_t          *data_ptr;
19     rt_uint8_t          data_size;
20     rt_uint32_t         read_index, save_index;
21 };
22 
23 struct efm32_leuart_dma_mode_t
24 {
25     /* DMA Channel */
26     rt_uint32_t         dma_channel;
27 
28     /* buffer info */
29     rt_uint32_t         *data_ptr;
30     rt_uint8_t          data_size;
31 };
32 
33 struct efm32_leuart_device_t
34 {
35     /* Counter */
36     rt_uint32_t         counter;
37     /* Lock */
38     struct rt_semaphore *lock;
39     /* Unit number */
40     rt_uint8_t          unit;
41     /* State */
42     volatile rt_uint8_t state;
43     /*  Pointer to LEUART device structure */
44     LEUART_TypeDef      *leuart_device;
45     /* Pointer to RX structure */
46     void                *rx_mode;
47     /* Pointer to TX structure */
48     void                *tx_mode;
49 };
50 
51 /* Exported constants --------------------------------------------------------*/
52 /* Exported macro ------------------------------------------------------------*/
53 #define LEUART_WAIT_TIME_TX     (RT_TICK_PER_SECOND / 100 * 3)
54 
55 #define LEUART_STATE_CONSOLE    (1 << 0)
56 #define LEUART_STATE_SYNC       (1 << 1)
57 #define LEUART_STATE_MASTER     (1 << 2)
58 #define LEUART_STATE_AUTOCS     (1 << 3)
59 #define LEUART_STATE_TX_BUSY    (1 << 4)
60 #define LEUART_STATE_RX_BUSY    (1 << 5)
61 
62 
63 /* Exported functions ------------------------------------------------------- */
64 void rt_hw_leuart_init(void);
65 
66 #endif /* __DRV_LEUSART_H__ */
67 
68