105 lines
4.1 KiB
C
105 lines
4.1 KiB
C
/*==============================================================================
|
||
* Инициализация UART с использованием бибилотеки PLIB035
|
||
*------------------------------------------------------------------------------
|
||
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
|
||
*==============================================================================
|
||
* ЦНИИ СЭТ
|
||
*==============================================================================
|
||
*/
|
||
#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*/
|