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