#ifndef USART_H #define USART_H #include "at32f403a_407.h" #include "ring_buf.h" #include "FreeRTOS.h" #include "semphr.h" #include #include /*------индексы в массиве uarts --------------*/ #define DEBUG_USART 0 // USART1 #define MODEM_USART 1 // USART2 #define EXT_1_USART 2 // USART3 #define EXT_2_USART 3 // USART4 #define EXT_3_USART 4 // USART5 #define EXT_4_USART 5 // USART6 /** * @brief Скорость USART */ typedef enum { BRD_1200 = 0, BRD_2400, BRD_4800, BRD_9600, BRD_19200, BRD_38400, BRD_57600, BRD_115200, BRD_230400, BRD_460800, } rate_t; /** * @brief Длина данных USART */ typedef enum { DATABITS_7 = 0, DATABITS_8, } databits_t; /** * @brief Количество стоповых бит USART */ typedef enum { STOP_0_5 = 0, STOP_1, STOP_1_5, STOP_2, } stopbits_t; /** * @brief Четность прозрачного порта */ typedef enum { NO_PAR = 0, ODD_PAR, EVEN_PAR, MAX_PARITY_TYPES } parity_t; typedef struct{ rate_t baud; // Скорость порта parity_t parity; // Четность databits_t databits; // Число бит данных stopbits_t stopbits; // Число стоп-бит }uart_settings_t; typedef struct{ QueueHandle_t *txQ; QueueHandle_t *rxQ; }transport_queue_t; typedef struct uart_s { bool enabled; uart_settings_t setting; //USART_TypeDef *addr; usart_type *addr; uint8_t *rx_fifo; uint8_t *tx_fifo; uint32_t buf_size; bool (*get_uart_settings)(uart_settings_t *struct_sett_value, uint8_t num_uart); transport_queue_t trans_queue; void (*set_uart_queue)(transport_queue_t *trans_queue, uint8_t num_uart); rbuf_t rx_buf; rbuf_t tx_buf; SemaphoreHandle_t rx_buf_sem; SemaphoreHandle_t tx_buf_sem; } uart_t; void usart_init_struct(void); void usart_reinit(void); void transport_enable_tx(uint8_t indx_uarts); #if 0 void uart_irq_enable(uint8_t indx_uarts); int uart_getchar(uint8_t indx_uarts, unsigned int timeout); int uart_send_block(uint8_t indx_uarts, void *data, uint8_t len); void uart_putchar(uint8_t indx_uarts, uint8_t byte); uart_t* uart_get_settings_ptr(void); void putc_(void *p, char c); void putchar_(uint8_t c); #endif #endif /* #ifndef USART_H */ /****************************** (C) LiteMesh ***************** end of file ****/