Добавлено:
- рефакторинг названий: - маленькие буквы - инит периферии - ТакойСтильФункций - API для использования - сделаны шапки с инструкциями к функциями - доработан ацп секвенсора - доработан систем тики. можно настроить его на разные частоты и подключить коллбеки на разный период - в gpio добавлены функции для кнопок и диодов - генерация бинарника
This commit is contained in:
186
Core/App/uart.h
186
Core/App/uart.h
@@ -1,11 +1,17 @@
|
||||
/*==============================================================================
|
||||
* Инициализация UART с использованием бибилотеки PLIB035
|
||||
*------------------------------------------------------------------------------
|
||||
* ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
|
||||
*==============================================================================
|
||||
* ЦНИИ СЭТ
|
||||
*==============================================================================
|
||||
*/
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file uart.h
|
||||
* @author Разваляев Алексей
|
||||
* @brief Драйвер UART на основе PLIB035.
|
||||
* Данный файл содержит определения типов, структур и прототипы функций
|
||||
* для работы с UART, включая:
|
||||
* + Структуры и typedef для UART
|
||||
* + Макросы для конфигурации направления передачи
|
||||
* + Прототипы функций для инициализации и API драйвера
|
||||
*
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef __UART_H
|
||||
#define __UART_H
|
||||
//-- Includes ------------------------------------------------------------------
|
||||
@@ -13,92 +19,148 @@
|
||||
#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
|
||||
// Дефайны для режима пина RxEnable, TxEnable
|
||||
/** @brief Направление: никакого */
|
||||
#define UART_Direction_None DISABLE, DISABLE
|
||||
/** @brief Направление: Rx и Tx */
|
||||
#define UART_Direction_RxTx ENABLE, ENABLE
|
||||
/** @brief Направление: только Tx */
|
||||
#define UART_Direction_Tx DISABLE, ENABLE
|
||||
/** @brief Направление: только Rx */
|
||||
#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 UART0_Tx_Pin GPIO_Pin_10 /**< PB10 — UART0 Tx */
|
||||
#define UART0_Rx_Pin GPIO_Pin_1 /**< PB11 — UART0 Rx */
|
||||
#define UART0_GPIO_Port GPIOB /**< GPIO порт UART0 */
|
||||
|
||||
#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
|
||||
#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 /**< GPIO порт UART1 */
|
||||
|
||||
#define USE_TX_QUEUE 1 /*!< Использовать очередь для отправки, чтобы не терять данные */
|
||||
#define TX_QUEUE_SIZE 32 /*!< Размер очереди в кол-ве буферов для отправки */
|
||||
|
||||
//-- Types ---------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* @brief Типы callback-функций UART
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
UART_Callback_Rx,
|
||||
UART_Callback_Tx,
|
||||
UART_Callback_Idle,
|
||||
UART_Callback_Error,
|
||||
}UART_CallbackTypeDef;
|
||||
UART_Callback_Rx, /*!< Приём данных завершён */
|
||||
UART_Callback_Tx, /*!< Передача данных завершена */
|
||||
UART_Callback_Idle, /*!< Обнаружено состояние IDLE */
|
||||
UART_Callback_Error, /*!< Ошибка UART */
|
||||
|
||||
} UART_CallbackTypeDef;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Расширенная конфигурация UART
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
UART_Init_TypeDef UART_Init; /* Стандартная конфигурация из PLIB */
|
||||
|
||||
// Callback функции
|
||||
void (*RxCallback)(void); /* Вызывается при приеме полного сообщения */
|
||||
void (*TxCallback)(void); /* Вызывается при окончании передачи */
|
||||
void (*IdleCallback)(void); /* Вызывается при IDLE линии на RX */
|
||||
void (*ErrCallback)(void); /* Вызывается при ошибке */
|
||||
|
||||
UART_Init_TypeDef UART_Init; /*!< Стандартная конфигурация UART из PLIB */
|
||||
|
||||
/* Callback функции */
|
||||
void (*RxCallback)(void); /*!< Вызывается при приёме полного сообщения */
|
||||
void (*TxCallback)(void); /*!< Вызывается при окончании передачи */
|
||||
void (*IdleCallback)(void); /*!< Вызывается при IDLE линии RX */
|
||||
void (*ErrCallback)(void); /*!< Вызывается при ошибке UART */
|
||||
|
||||
} UART_ExtInit_TypeDef;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Структура элемента очереди
|
||||
*/
|
||||
typedef struct {
|
||||
const uint8_t *Buf; /*!< Указатель на буфер данных */
|
||||
uint16_t Size; /*!< Размер данных в буфере */
|
||||
uint8_t InUse; /*!< Флаг занятости элемента */
|
||||
} UART_QueueItemTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Структура очереди UART
|
||||
*/
|
||||
typedef struct {
|
||||
UART_QueueItemTypeDef Queue[TX_QUEUE_SIZE]; /*!< Циклический буфер очереди */
|
||||
uint8_t QueueHead; /*!< Индекс головы очереди (куда добавляем) */
|
||||
uint8_t QueueTail; /*!< Индекс хвоста очереди (откуда берем) */
|
||||
uint8_t QueueCount; /*!< Количество элементов в очереди */
|
||||
uint8_t QueueEmpty; /*!< Флаг пустой очереди */
|
||||
uint8_t QueueFull; /*!< Флаг полной очереди */
|
||||
} UART_TxQueueTypeDef;
|
||||
|
||||
/**
|
||||
* @brief Хендл UART
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
UART_TypeDef *Instance; /* Регистры UART */
|
||||
UART_ExtInit_TypeDef *Config; /* Конфигурация UART */
|
||||
|
||||
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*/
|
||||
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;
|
||||
uint8_t *RxBufPtr; /*!< Указатель на буфер приёма */
|
||||
uint16_t RxCount; /*!< Счётчик принятых байт */
|
||||
uint16_t RxSize; /*!< Размер принимаемых данных */
|
||||
volatile uint8_t RxBusy; /*!< Флаг занятости RX */
|
||||
|
||||
#if (USE_TX_QUEUE==1)
|
||||
/* == TX QUEUE == */
|
||||
UART_TxQueueTypeDef TxQueue;
|
||||
#endif
|
||||
|
||||
} UART_HandleTypeDef;
|
||||
|
||||
//-- External handles ----------------------------------------------------------
|
||||
|
||||
extern UART_HandleTypeDef huart0;
|
||||
extern UART_HandleTypeDef huart1;
|
||||
|
||||
//-- Exported functions prototypes ---------------------------------------------
|
||||
|
||||
/* Init functions */
|
||||
|
||||
/* Первичная инициализация UART (UART0 / UART1) */
|
||||
void uart_init_first(void);
|
||||
|
||||
/* Инициализация UARTx */
|
||||
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);
|
||||
/* Общий обработчик прерываний UART */
|
||||
void uart_irq_handler(UART_HandleTypeDef *huart);
|
||||
/* Инициализация GPIO для UART0 */
|
||||
void uart0_gpio_init(void);
|
||||
/* Деинициализация GPIO для UART0 */
|
||||
void uart0_gpio_deinit(void);
|
||||
/* Инициализация GPIO для UART1 */
|
||||
void uart1_gpio_init(void);
|
||||
/* Деинициализация GPIO для UART1 */
|
||||
void uart1_gpio_deinit(void);
|
||||
|
||||
/* API functions*/
|
||||
|
||||
/* Установка callback-функции UART */
|
||||
OperationStatus UART_Set_Callback(UART_HandleTypeDef *huart, UART_CallbackTypeDef CallbackType, void (*Callback)(void));
|
||||
/* Запуск UART и настройка FIFO */
|
||||
OperationStatus UART_Start(UART_HandleTypeDef *huart, UART_FIFOLevel_TypeDef TxFifoLevel, UART_FIFOLevel_TypeDef RxFifoLevel);
|
||||
|
||||
/* Передача данных по UART (блокирующий режим) */
|
||||
OperationStatus UART_Transmit(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
|
||||
/* Приём данных по UART (блокирующий режим) */
|
||||
OperationStatus UART_Receive(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size, uint32_t timeout);
|
||||
/* Передача данных по UART (режим прерываний) */
|
||||
OperationStatus UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
|
||||
/* Приём данных по UART (режим прерываний) */
|
||||
OperationStatus UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *buf, uint16_t size);
|
||||
|
||||
|
||||
|
||||
#endif /*__UART_H*/
|
||||
|
||||
Reference in New Issue
Block a user