/*============================================================================== * Инициализация UART с использованием бибилотеки PLIB035 *------------------------------------------------------------------------------ * ЦНИИ СЭТ, Разваляев Алексей *============================================================================== * ЦНИИ СЭТ *============================================================================== */ #ifndef __UART_H #define __UART_H //-- Includes ------------------------------------------------------------------ #include "plib035.h" #include "retarget_conf.h" //-- Defines ------------------------------------------------------------------- // Дефайны для кольцевых буферов UART #ifndef UART_RX_BUF_SIZE #define UART_RX_BUF_SIZE 128 #endif #ifndef UART_TX_BUF_SIZE #define UART_TX_BUF_SIZE 128 #endif // Дефайны для режима направления UART #define UART_Direction_None DISABLE, DISABLE #define UART_Direction_RxTx ENABLE, ENABLE #define UART_Direction_Tx DISABLE, ENABLE #define UART_Direction_Rx ENABLE, DISABLE // Дефайны для пинов UART #define UART0_Tx_Pin GPIO_Pin_10 // PB10 для UART0 Tx #define UART0_Rx_Pin GPIO_Pin_11 // PB11 для UART0 Rx #define UART0_GPIO_Port GPIOB #define UART1_Tx_Pin GPIO_Pin_8 // PB8 для UART1 Tx #define UART1_Rx_Pin GPIO_Pin_9 // PB9 для UART1 Rx #define UART1_GPIO_Port GPIOB typedef enum { UART_Callback_Rx, UART_Callback_Tx, UART_Callback_Idle, UART_Callback_Error, }UART_CallbackTypeDef; typedef struct { UART_Init_TypeDef UART_Init; /* Стандартная конфигурация из PLIB */ // Callback функции void (*RxCallback)(void); /* Вызывается при приеме полного сообщения */ void (*TxCallback)(void); /* Вызывается при окончании передачи */ void (*IdleCallback)(void); /* Вызывается при IDLE линии на RX */ void (*ErrCallback)(void); /* Вызывается при ошибке */ } UART_ExtInit_TypeDef; typedef struct { UART_TypeDef *Instance; /* Регистры UART */ UART_ExtInit_TypeDef *Config; /* Конфигурация UART */ /* ===== TX ===== */ const uint8_t *TxBufPtr; /* текущий массив для передачи*/ uint16_t TxCount; /* счетчик отправленых байт*/ uint16_t TxSize; /* длина данных для отправки*/ volatile uint8_t TxBusy; /* Флаг занятости TX*/ /* ===== RX ===== */ uint8_t *RxBufPtr; /* буфер для приёма*/ uint16_t RxCount; /* счетчик принятых байт*/ uint16_t RxSize; /* длина данных для приема*/ volatile uint8_t RxBusy; /* Флаг занятости RX*/ }UART_HandleTypeDef; extern UART_HandleTypeDef huart0; extern UART_HandleTypeDef huart1; //-- Exported functions prototypes --------------------------------------------- void uart_init_first(void); OperationStatus uart_init(UART_HandleTypeDef *huart, UART_ExtInit_TypeDef *NewConfig); OperationStatus uart_set_callback(UART_HandleTypeDef* huart, UART_CallbackTypeDef cb_type, void (*Callback)(void)); OperationStatus uart_start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel); OperationStatus uart_transmit(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout); OperationStatus uart_receive(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout); OperationStatus uart_transmit_it(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size); OperationStatus uart_receive_it(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size); void uart_handler(UART_HandleTypeDef *huart); void uart0_gpio_init(void); void uart0_gpio_deinit(void); void uart1_gpio_init(void); void uart1_gpio_deinit(void); #endif /*__UART_H*/