ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
Драйвер модуля UART

Интерфейс предназначен для организации связи с другими цифровыми устройствами Подробнее...

Файлы

файл  hal_uart.h
 Интерфейс драйвера UART.
 
файл  hal_uart_dma.h
 Дополнение драйвера UART с пересылкой данных через DMA.
 

Структуры данных

struct  uart_config
 Конфигурация UART. Подробнее...
 
struct  uart_transfer
 Указатель на буфер приема или передачи Подробнее...
 
struct  uart_handle
 Дескриптор состояния приема/передачи для неблокирующих функций обмена Подробнее...
 
struct  _uart_dma_handle
 Дескриптор UART-DMA передачи Подробнее...
 

Макросы

#define HAL_UART_DRIVER_VERSION   (MAKE_VERSION(0, 1, 0))
 Версия драйвера UART.
 
#define UART_RETRY_TIMES   0U /* 0 - ожидание до получения значения */
 Количество циклов ожидания
 
#define HAL_UART_DMA_DRIVER_VERSION   (MAKE_VERSION(1, 0, 0))
 Версия драйвера
 

Определения типов

typedef void(* uart_transfer_callback_t) (UART_Type *base, struct uart_handle *handle, enum uart_status status, void *user_data)
 Сallback-функция
 
typedef struct _uart_dma_handle uart_dma_handle_t
 Дескриптор UART-DMA передачи
 
typedef void(* uart_dma_transfer_callback_t) (UART_Type *base, uart_dma_handle_t *handle, enum uart_status status, void *user_data)
 Функция обратного вызова
 

Перечисления

enum  uart_status
 Статусы драйвера UART. Подробнее...
 
enum  uart_interrupt_enable
 Конфигурация прерываний для UART. Подробнее...
 
enum  uart_lsr_flags
 Флаги состояния UART LSR. Подробнее...
 
enum  uart_parity_mode
 Режимы четности UART. Подробнее...
 
enum  uart_stop_bit_count
 Количество стоп-битов для UART. Подробнее...
 
enum  uart_data_len
 Количество бит данных в передаваемом символе Подробнее...
 
enum  uart_txfifo_watermark
 Триггер уровня заполненности TxFIFO. Подробнее...
 
enum  uart_rxfifo_watermark
 Триггер уровня заполненности RxFIFO. Подробнее...
 
enum  uart_rs485_mode
 Режим работы RS485. Подробнее...
 
enum  uart_rs485_active_state
 Активное сотояние линии для RS485. Подробнее...
 

Функции

void UART_TransferCreateHandleDMA (UART_Type *base, uart_dma_handle_t *handle, uart_dma_transfer_callback_t callback, void *user_data, dma_handle_t *tx_dma_handle, dma_handle_t *rx_dma_handle)
 Функция для инициализации полей дескриптора UART-DMA.
 
enum uart_status UART_TransferSendDMA (UART_Type *base, uart_dma_handle_t *handle, struct uart_transfer *xfer)
 Функция осуществляющая передачу данных по UART, данные в буфер попадают через DMA канал
 
enum uart_status UART_TransferReceiveDMA (UART_Type *base, uart_dma_handle_t *handle, struct uart_transfer *xfer)
 Функция осуществляющая передачу данных по UART, данные в буфер попадают через DMA канал
 
void UART_TransferAbortSendDMA (UART_Type *base, uart_dma_handle_t *handle)
 Функция прерывающая передачу данных между UART(TX) и DMA.
 
void UART_TransferAbortReceiveDMA (UART_Type *base, uart_dma_handle_t *handle)
 Функция прерывающая передачу данных между UART(RX) и DMA.
 
static void UART_WaitWhileActive (UART_Type *base)
 Ожидание завершения передачи. Выход из функции будет осуществлен по окончании UART транзакций
 
static void UART_DMADescriptorInitTX (UART_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint32_t data_width, void *src_addr)
 Инициализация дескрипторов DMA для многоблочной передачи TX.
 
static void UART_DMADescriptorInitRX (UART_Type *base, dma_descriptor_t *desc, uint32_t count, uint32_t data_size, uint32_t data_width, void *dst_addr)
 Инициализация дескрипторов DMA для многоблочной передачи TX.
 

Инициализация и деинициализация

enum uart_status UART_Init (UART_Type *base, const struct uart_config *config, uint32_t src_clock_hz)
 Инициализирует модуль UART структурой конфигурации пользователя и частотой периферии
 
enum uart_status UART_Deinit (UART_Type *base)
 Деинициализирует модуль UART.
 
enum uart_status UART_GetDefaultConfig (struct uart_config *config)
 Получает структуру конфигурации по умолчанию
 
enum uart_status UART_SetBaudRate (UART_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
 Устанавливает скорость модуля UART.
 

Состояние

static uint32_t UART_GetStatusFlags (UART_Type *base)
 Извлекает флаги состояния UART.
 

Включение/выключение и настройка прерываний

static void UART_EnableInterrupts (UART_Type *base, uint32_t mask)
 Разрешает прерывания UART в соответствии с предоставленной маской
 
static void UART_DisableInterrupts (UART_Type *base, uint32_t mask)
 Отключает прерывания UART в соответствии с предоставленной маской
 
static uint32_t UART_GetEnabledInterrupts (UART_Type *base)
 Запрос маски включенных прерываний в UART.
 
static void UART_SetRxFifoWatermark (UART_Type *base, enum uart_rxfifo_watermark water)
 Устанавливает триггер уровня заполненности RxFIFO.
 
static void UART_SetTxFifoWatermark (UART_Type *base, enum uart_txfifo_watermark water)
 Устанавливает триггер уровня заполненности TxFIFO.
 

Включение/выключение и настройка расширенных режимов работы UART

static void UART_SetLoopback (UART_Type *base, bool enable)
 Включение/выключение режима петли
 
static void UART_SetIr (UART_Type *base, bool enable)
 Включение/выключение инфракрасного режима работы
 
static void UART_SetRs485 (UART_Type *base, bool enable)
 Включение/выключение RS485 режима работы
 
static void UART_Rs485Mode (UART_Type *base, enum uart_rs485_mode mode, enum uart_rs485_active_state de, enum uart_rs485_active_state re)
 Установка режима работы RS485.
 

Прием и передача без использования прерываний

static void UART_WriteByte (UART_Type *base, uint8_t data)
 Записывает данные на передачу в регистр передачи
 
static void UART_WriteByteWait (UART_Type *base, uint8_t data)
 Записывает данные на передачу в регистр передачи c ожиданием освобождения места
 
static uint8_t UART_ReadByte (UART_Type *base)
 Вычитывает байт из регистра приема
 
static uint8_t UART_ReadByteWait (UART_Type *base)
 Вычитывает байт из регистра приема с ожиданием получения
 
static uint8_t UART_GetRxFifoCount (UART_Type *base)
 Получить количество байтов в RxFIFO.
 
static uint8_t UART_GetTxFifoCount (UART_Type *base)
 Получить количество байтов в TxFIFO.
 
enum uart_status UART_WriteBlocking (UART_Type *base, const uint8_t *data, size_t length)
 Записывает в регистр TX с использованием метода блокировки
 
enum uart_status UART_ReadBlocking (UART_Type *base, uint8_t *data, size_t length)
 Чтение регистра данных RX с использованием метода блокировки
 

Прием данных через прерывания с использованием буферов

enum uart_status UART_TransferStartRingBuffer (UART_Type *base, struct uart_handle *handle, uint8_t *ring_buffer, size_t ring_buffer_size)
 Инициализация колцевого буфера на прием
 
enum uart_status UART_TransferStopRingBuffer (UART_Type *base, struct uart_handle *handle)
 Прерывает фоновую передачу и удаляет кольцевой буфер
 
size_t UART_TransferGetRxRingBufferLength (struct uart_handle *handle)
 Получить длину данных, принятых в кольцевом RX буфере
 
enum uart_status UART_TransferReceiveNonBlocking (UART_Type *base, struct uart_handle *handle, struct uart_transfer *xfer, size_t *received_bytes)
 Прием данных в асинхронном режиме (без ожидания) по прерыванию
 
enum uart_status UART_TransferAbortReceive (UART_Type *base, struct uart_handle *handle)
 Отмена приема данных по прерыванию через линейный буфер в дескрипторе
 
enum uart_status UART_TransferGetReceiveCount (UART_Type *base, struct uart_handle *handle, uint32_t *count)
 Возвращает количество принятых байтов
 

Отправка данных через прерывания с использованием буферов

enum uart_status UART_TransferSendNonBlocking (UART_Type *base, struct uart_handle *handle, struct uart_transfer *xfer)
 Передает буфер данных по прерыванию
 
enum uart_status UART_TransferAbortSend (UART_Type *base, struct uart_handle *handle)
 Останавливает передачу данных, управляемую прерыванием
 
enum uart_status UART_TransferGetSendCount (UART_Type *base, struct uart_handle *handle, uint32_t *count)
 Возвращает количество байтов, отправленных в шину
 
enum uart_status UART_TransferStartTxRingBuffer (UART_Type *base, struct uart_handle *handle, uint8_t *tx_ring_buffer, size_t ring_buffer_size)
 Инициализация колцевого буфера на передачу
 
size_t UART_TransferGetTxRingBufferLength (struct uart_handle *handle)
 Получить количество байт данных для отправки в кольцевом Tx буфере
 
enum uart_status UART_WriteTxRing (UART_Type *base, struct uart_handle *handle, const uint8_t *data, size_t *length)
 Передать линейный буфер на передачу через кольцевой буфер
 
enum uart_status UART_TransferStopTxRingBuffer (UART_Type *base, struct uart_handle *handle)
 Отключение кольцевого буфера передатчика
 

Прием и передача через прерывания с использованием буферов

enum uart_status UART_TransferCreateHandle (UART_Type *base, struct uart_handle *handle, uart_transfer_callback_t callback, void *user_data)
 Инициализирует дескриптор UART.
 
void UART_TransferHandleIRQ (UART_Type *base, struct uart_handle *handle)
 Функция-обработчик UART IRQ.
 

Подробное описание

Интерфейс предназначен для организации связи с другими цифровыми устройствами

Драйвер позволяет производить приемо/передачу по последовательному асинхронному интерфейсу в режиме ожидания (polling) и режиме без ожидания (interrupt). Поддерживает некоторые расширенные возможности: IR-режим, режим петли, режим RS485. Использует аппаратный Rx и Тх FIFO.

Перечисления

◆ uart_data_len

Количество бит данных в передаваемом символе

Элементы перечислений
UART_5BitsPerChar 

5 бит на символ

UART_6BitsPerChar 

6 бит на символ

UART_7BitsPerChar 

7 бит на символ

UART_8BitsPerChar 

8 бит на символ

◆ uart_interrupt_enable

Конфигурация прерываний для UART.

Элементы перечислений
UART_ThresoldInterruptEnable 

0x80 По порогу

UART_ModemInterruptEnable 

0x08 По статусу модема

UART_RxLineInterruptEnable 

0x04 По состоянию линии приема

UART_TxInterruptEnable 

0x02 По опустошении регистра передатчика

UART_RxInterruptEnable 

0x01 По доступности полученных данных или при включенном FIFO, прерывания по таймауту входных данных

UART_AllInterruptsEnable 

0x8f Все прерывания

◆ uart_lsr_flags

Флаги состояния UART LSR.

Элементы перечислений
UART_LSR_FlagRxError 

Суммарный бит ошибки приемника, cбрасывается при чтении LSR

UART_LSR_FlagTxHwEmpty 

Бит отсутствия передаваемых данных в FIFO буфере и сдвиговом регистре передатчика

UART_LSR_FlagTxSwEmpty 

Бит отсутствия данных в буфере передатчика

UART_LSR_FlagRxLinebreakError 

Ошибка обрыв линии,сбрасывается при чтении LSR

UART_LSR_FlagRxFrameError 

Ошибка кадрирования LSR

UART_LSR_FlagRxParityError 

Ошибка четности

UART_LSR_FlagRxOverflowError 

Ошибка переполнения, бит сбрасывается при чтении содержимого регистра LSR

UART_LSR_FlagRxReady 

Есть данные в приемнике, которые еще не были прочитаны

◆ uart_parity_mode

Режимы четности UART.

Элементы перечислений
UART_ParityOdd 

Тип - нечетная

UART_ParityEven 

Тип - четная

◆ uart_rs485_active_state

Активное сотояние линии для RS485.

Элементы перечислений
UART_RS485_ActiveStateHigh 

Активный уровень для линии высокий

UART_RS485_ActiveStateLow 

Активный уровень для линии низкий

◆ uart_rs485_mode

Режим работы RS485.

Элементы перечислений
UART_RS485_ModeFullDuplex 

Дуплекс

UART_RS485_ModeHalfDuplexManual 

Полудуплекс: переключение направления передачи вручную

UART_RS485_ModeHalfDuplexAuto 

Полудуплекс: автопереключение направления передачи

◆ uart_rxfifo_watermark

Триггер уровня заполненности RxFIFO.

Элементы перечислений
UART_RxFifoOneChar 

В RxFIFO - 1 символ

UART_RxFifoQuarterFull 

RxFIFO заполнен на четверть, 1/4

UART_RxFifoHalfFull 

RxFIFO заполнен на половину, 1/2

UART_RxFifoTwoToFull 

RxFIFO на 2 меньше чем полный

◆ uart_status

Статусы драйвера UART.

Элементы перечислений
UART_Status_Ok 

Успешно

UART_Status_Fail 

Провал

UART_Status_ReadOnly 

Только чтение

UART_Status_InvalidArgument 

Неверный аргумент

UART_Status_Timeout 

Отказ по таймауту

UART_Status_NoTransferInProgress 

Нет текущей передачи данных

UART_Status_TxBusy 

Передатчик занят

UART_Status_RxBusy 

Ресивер занят

UART_Status_TxIdle 

Передатчик простаивает

UART_Status_RxIdle 

Приемник простаивает

UART_Status_TxError 

Ошибка в TxFIFO

UART_Status_RxError 

Ошибка в RxFIFO

UART_Status_RxRingBufferOverrun 

Ошибка в кольцевом буфере Rx

UART_Status_RxFifoBufferOverrun 

Ошибка переполнения hw RxFIFO буферa

UART_Status_BreakLineError 

Ошибка обрыва линии

UART_Status_FramingError 

Ошибка кадра

UART_Status_ParityError 

Ошибка четности

UART_Status_BaudrateNotSupport 

Скорость передачи не поддерживается для текущего источника синхронизации

UART_Status_TxRingBufferNull 

Кольцевой буфер передатчика не инициализирован

◆ uart_stop_bit_count

Количество стоп-битов для UART.

Элементы перечислений
UART_OneStopBit 

1 стоп бит

UART_TwoOrOneAndHalfStopBit 

1.5 или 2 стоп бит, зависит от количества бит данных в передаваемом символе

◆ uart_txfifo_watermark

Триггер уровня заполненности TxFIFO.

Элементы перечислений
UART_TxFifoEmpty 

TxFIFO пуст

UART_TxFifoTwoChars 

В TxFIFO - 2 символа

UART_TxFifoQuarterFull 

TxFIFO заполнен на четверть, 1/4

UART_TxFifoHalfFull 

TxFIFO заполнен на половину, 1/2

Функции

◆ UART_Deinit()

enum uart_status UART_Deinit ( UART_Type * base)

Деинициализирует модуль UART.

Функция ожидает завершения передачи, отключает передачу и прием и отключает синхронизацию модуля UART.

Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_DisableInterrupts()

static void UART_DisableInterrupts ( UART_Type * base,
uint32_t mask )
inlinestatic

Отключает прерывания UART в соответствии с предоставленной маской

Эта функция отключает прерывания UART в соответствии с предоставленной маской. Маска - это логическое ИЛИ членов перечисления (uart_interrupt_enable). В этом примере показано, как отключить пустое прерывание TX и полное прерывание RX:

static void UART_DisableInterrupts(UART_Type *base, uint32_t mask)
Отключает прерывания UART в соответствии с предоставленной маской
Definition hal_uart.h:418
@ UART_TxInterruptEnable
Definition hal_uart.h:74
@ UART_RxInterruptEnable
Definition hal_uart.h:75
Аргументы
baseУказатель на базовый адрес UART
maskМаска запрещаемых прерываний

◆ UART_DMADescriptorInitRX()

static void UART_DMADescriptorInitRX ( UART_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint32_t data_width,
void * dst_addr )
inlinestatic

Инициализация дескрипторов DMA для многоблочной передачи TX.

Аргументы
baseБазовый адрес SPI
descУказатель на массив дескрипторов
countКоличество DMA дескрипторов
data_sizeОбщее число передаваемых данных
data_widthШирина одного передаваемого слова
dst_addrАдрес Приемника

◆ UART_DMADescriptorInitTX()

static void UART_DMADescriptorInitTX ( UART_Type * base,
dma_descriptor_t * desc,
uint32_t count,
uint32_t data_size,
uint32_t data_width,
void * src_addr )
inlinestatic

Инициализация дескрипторов DMA для многоблочной передачи TX.

Аргументы
baseБазовый адрес SPI
descУказатель на массив дескрипторов
countКоличество DMA дескрипторов
data_sizeОбщее число передаваемых данных
data_widthШирина одного передаваемого слова
src_addrАдрес Источника

◆ UART_EnableInterrupts()

static void UART_EnableInterrupts ( UART_Type * base,
uint32_t mask )
inlinestatic

Разрешает прерывания UART в соответствии с предоставленной маской

Эта функция разрешает прерывания UART в соответствии с предоставленной маской. Маска - это логическое ИЛИ членов перечисления (uart_interrupt_enable). Например, чтобы разрешить прерывание TX и прерывание RX:

static void UART_EnableInterrupts(UART_Type *base, uint32_t mask)
Разрешает прерывания UART в соответствии с предоставленной маской
Definition hal_uart.h:394
Аргументы
baseУказатель на базовый адрес UART
maskМаска разрешаемых прерываний

◆ UART_GetDefaultConfig()

enum uart_status UART_GetDefaultConfig ( struct uart_config * config)

Получает структуру конфигурации по умолчанию

Эта функция инициализирует структуру конфигурации UART значением по умолчанию:

config->baudrate_bps = 115200U;
config->enable_parity = false;
config->stop_bit_count = UART_OneStopBit;
config->bit_count_per_char = UART_8BitPerChar;
config->enable_rxfifo = true;
config->enable_txfifo = true;
config->enable_loopback = false;
config->enable_infrared = false;
config->enable_hardware_flow_control = false;
config->break_line = false;
UART_Init(UART1, &uart_config, 20000000U);
enum uart_status UART_Init(UART_Type *base, const struct uart_config *config, uint32_t src_clock_hz)
Инициализирует модуль UART структурой конфигурации пользователя и частотой периферии
@ UART_OneStopBit
Definition hal_uart.h:109
Конфигурация UART.
Definition hal_uart.h:163
Аргументы
configУказатель на структуру конфигурации
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_GetEnabledInterrupts()

static uint32_t UART_GetEnabledInterrupts ( UART_Type * base)
inlinestatic

Запрос маски включенных прерываний в UART.

Запрос маски включенных прерываний в UART; единицы в соответствующих разрядах соответствуют включенным прерываниям.

Аргументы
baseУказатель на базовый адрес UART
Возвращает
Маска включенных прерываний

◆ UART_GetRxFifoCount()

static uint8_t UART_GetRxFifoCount ( UART_Type * base)
inlinestatic

Получить количество байтов в RxFIFO.

Аргументы
baseУказатель на базовый адрес UART
Возвращает
Количество байт в RxFIFO

◆ UART_GetStatusFlags()

static uint32_t UART_GetStatusFlags ( UART_Type * base)
inlinestatic

Извлекает флаги состояния UART.

Функция получает все флаги состояния UART, флаги возвращаются как логические ИЛИ значение uart_lsr_flags. Чтобы проверить конкретный статус, сравните возвращаемое значение с перечислителями в uart_lsr_flags. Например, чтобы проверить, пуст ли TX:

{
...
}
static uint32_t UART_GetStatusFlags(UART_Type *base)
Извлекает флаги состояния UART.
Definition hal_uart.h:366
@ UART_LSR_FlagTxHwEmpty
Definition hal_uart.h:88
Аргументы
baseУказатель на базовый адрес UART
Возвращает
Маска флагов состояния UART

◆ UART_GetTxFifoCount()

static uint8_t UART_GetTxFifoCount ( UART_Type * base)
inlinestatic

Получить количество байтов в TxFIFO.

Аргументы
baseУказатель на базовый адрес UART
Возвращает
Количество байтов в TxFIFO

◆ UART_Init()

enum uart_status UART_Init ( UART_Type * base,
const struct uart_config * config,
uint32_t src_clock_hz )

Инициализирует модуль UART структурой конфигурации пользователя и частотой периферии

Эта функция конфигурирует модуль UART с пользовательскими настройками. Пользователь может настроить конфигурацию структуры, а также получить конфигурацию по умолчанию с помощью функции UART_GetDefaultConfig.

Пример ниже показывает, как использовать эту функцию для настройки UART:

config->baudrate_bps = 115200U;
config->enable_parity = false;
config->stop_bit_count = UART_OneStopBit;
config->bit_count_per_char = UART_8BitPerChar;
config->enable_rxfifo = true;
config->enable_txfifo = true;
config->enable_loopback = false;
config->enable_infrared = false;
config->enable_hardware_flow_control = false;
config->break_line = false;
UART_Init(UART1, &uart_config, 20000000U);
Аргументы
baseУказатель на базовый адрес UART
configУказатель на определяемую пользователем структуру конфигурации
src_clock_hzТактовая частота источника в Гц
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_ReadBlocking()

enum uart_status UART_ReadBlocking ( UART_Type * base,
uint8_t * data,
size_t length )

Чтение регистра данных RX с использованием метода блокировки

Эта функция опрашивает регистр RX, ожидает, пока регистр RX будет заполнен или пока RX FIFO не будет иметь данные и читать данные из регистра TX.

Аргументы
baseУказатель на базовый адрес UART
dataУказатель на начальный адрес буфера для хранения полученных данных
lengthРазмер буфера
Возвращаемые значения
UART_Status_Ok
UART_Status_Timeout
UART_Status_RxError
UART_Status_FramingError
UART_Status_ParityError

◆ UART_ReadByte()

static uint8_t UART_ReadByte ( UART_Type * base)
inlinestatic

Вычитывает байт из регистра приема

Читает байт из регистра приема RBR. Верхний уровень должен проверить, что в регистре RBR что-то есть перед вызовом.

Аргументы
baseУказатель на базовый адрес UART
Возвращает
Байт, считанный из регистра

◆ UART_ReadByteWait()

static uint8_t UART_ReadByteWait ( UART_Type * base)
inlinestatic

Вычитывает байт из регистра приема с ожиданием получения

Читает из регистра приема RBR. Если в регистре нет данных, функция будет ждать получения хотя бы одного байта.

Аргументы
baseУказатель на базовый адрес UART
Возвращает
Байт, считанный из регистра

◆ UART_Rs485Mode()

static void UART_Rs485Mode ( UART_Type * base,
enum uart_rs485_mode mode,
enum uart_rs485_active_state de,
enum uart_rs485_active_state re )
inlinestatic

Установка режима работы RS485.

Аргументы
baseУказатель на базовый адрес UART
modeРежим работы RS485
deuart_rs485_active_state
reuart_rs485_active_state

◆ UART_SetBaudRate()

enum uart_status UART_SetBaudRate ( UART_Type * base,
uint32_t baudrate_bps,
uint32_t src_clock_hz )

Устанавливает скорость модуля UART.

Эта функция настраивает скорость передачи модуля UART. Используется для обновления скорости модуля после его инициализации с помощью UART_Init :

UART_SetBaudRate(UART1, 115200U, 20000000U);
enum uart_status UART_SetBaudRate(UART_Type *base, uint32_t baudrate_bps, uint32_t src_clock_hz)
Устанавливает скорость модуля UART.
Аргументы
baseУказатель на базовый адрес UART
baudrate_bpsУстанавливаемая скорость передачи данных
src_clock_hzТактовая частота источника в Гц
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_SetIr()

static void UART_SetIr ( UART_Type * base,
bool enable )
inlinestatic

Включение/выключение инфракрасного режима работы

Аргументы
baseУказатель на базовый адрес UART
enableВключение/выключение режима

◆ UART_SetLoopback()

static void UART_SetLoopback ( UART_Type * base,
bool enable )
inlinestatic

Включение/выключение режима петли

Аргументы
baseУказатель на базовый адрес UART
enableВключение/выключение режима

◆ UART_SetRs485()

static void UART_SetRs485 ( UART_Type * base,
bool enable )
inlinestatic

Включение/выключение RS485 режима работы

Аргументы
baseУказатель на базовый адрес UART
enableВключение/выключение режима

◆ UART_SetRxFifoWatermark()

static void UART_SetRxFifoWatermark ( UART_Type * base,
enum uart_rxfifo_watermark water )
inlinestatic

Устанавливает триггер уровня заполненности RxFIFO.

Аргументы
baseУказатель на базовый адрес UART
waterТриггер уровня заполненности RxFIFO

◆ UART_SetTxFifoWatermark()

static void UART_SetTxFifoWatermark ( UART_Type * base,
enum uart_txfifo_watermark water )
inlinestatic

Устанавливает триггер уровня заполненности TxFIFO.

Аргументы
baseУказатель на базовый адрес UART
waterТриггер уровня заполненности TxFIFO

◆ UART_TransferAbortReceive()

enum uart_status UART_TransferAbortReceive ( UART_Type * base,
struct uart_handle * handle )

Отмена приема данных по прерыванию через линейный буфер в дескрипторе

Не оказывает никакого влияния на работу кольцевого буфера. Для отмены приема через кольцевой буффер используется UART_TransferStopRingBuffer. Пользователь может взять handle->rx_data_size, чтобы узнать сколько еще не принято.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferAbortReceiveDMA()

void UART_TransferAbortReceiveDMA ( UART_Type * base,
uart_dma_handle_t * handle )

Функция прерывающая передачу данных между UART(RX) и DMA.

Аргументы
baseБазовый адрес UART
handleДескриптор UART-DMA

◆ UART_TransferAbortSend()

enum uart_status UART_TransferAbortSend ( UART_Type * base,
struct uart_handle * handle )

Останавливает передачу данных, управляемую прерыванием

Эта функция останавливает отправку данных, управляемую прерыванием. Пользователь может получить остаток, чтобы узнать сколько байтов еще не отправлено.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferAbortSendDMA()

void UART_TransferAbortSendDMA ( UART_Type * base,
uart_dma_handle_t * handle )

Функция прерывающая передачу данных между UART(TX) и DMA.

Аргументы
baseБазовый адрес UART
handleДескриптор UART-DMA

◆ UART_TransferCreateHandle()

enum uart_status UART_TransferCreateHandle ( UART_Type * base,
struct uart_handle * handle,
uart_transfer_callback_t callback,
void * user_data )

Инициализирует дескриптор UART.

Для указанного экземпляра UART требуется вызвать эту функцию единожды, чтобы получить инициализированный дескриптор.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
callbackУказатель на функцию обратного вызова
user_dataУказатель на параметр функции обратного вызова
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferCreateHandleDMA()

void UART_TransferCreateHandleDMA ( UART_Type * base,
uart_dma_handle_t * handle,
uart_dma_transfer_callback_t callback,
void * user_data,
dma_handle_t * tx_dma_handle,
dma_handle_t * rx_dma_handle )

Функция для инициализации полей дескриптора UART-DMA.

Аргументы
baseБазовый адрес UART
handleДескриптор UART-DMA передачи
callbackФункция обратного вызова
user_dataПользовательские данные
tx_dma_handleДескриптор DMA для передачи данных
rx_dma_handleДескриптор DMA для приема данных

◆ UART_TransferGetReceiveCount()

enum uart_status UART_TransferGetReceiveCount ( UART_Type * base,
struct uart_handle * handle,
uint32_t * count )

Возвращает количество принятых байтов

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
countУказатель, возвращает количество принятых байтов
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_NoTransferInProgress

◆ UART_TransferGetRxRingBufferLength()

size_t UART_TransferGetRxRingBufferLength ( struct uart_handle * handle)

Получить длину данных, принятых в кольцевом RX буфере

Аргументы
handleУказатель на дескриптор
Возвращает
Длина данных, принятых в кольцевом RX буфере

◆ UART_TransferGetSendCount()

enum uart_status UART_TransferGetSendCount ( UART_Type * base,
struct uart_handle * handle,
uint32_t * count )

Возвращает количество байтов, отправленных в шину

Эта функция возвращает количество байтов, отправленных в шину по прерыванию.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
countУказатель, возвращает количество байтов отправленных в шину
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_NoTransferInProgress

◆ UART_TransferGetTxRingBufferLength()

size_t UART_TransferGetTxRingBufferLength ( struct uart_handle * handle)

Получить количество байт данных для отправки в кольцевом Tx буфере

Аргументы
handleУказатель на дескриптор
Возвращает
Количество байт

◆ UART_TransferHandleIRQ()

void UART_TransferHandleIRQ ( UART_Type * base,
struct uart_handle * handle )

Функция-обработчик UART IRQ.

Эта функция обрабатывает запросы на передачу и прием UART IRQ.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор

◆ UART_TransferReceiveDMA()

enum uart_status UART_TransferReceiveDMA ( UART_Type * base,
uart_dma_handle_t * handle,
struct uart_transfer * xfer )

Функция осуществляющая передачу данных по UART, данные в буфер попадают через DMA канал

Аргументы
baseБазовый адрес UART
handleДескриптор UART-DMA
xferСтруктура, содержащая указатель на буфер приема и размер принимаемых данных
Возвращаемые значения
#UART_DMA_Status_InvalidArgument
#UART_DMA_Status_RxBusy
#UART_DMA_Status_DMA_Busy
#UART_DMA_Status_Fail
#UART_DMA_Status_Success

◆ UART_TransferReceiveNonBlocking()

enum uart_status UART_TransferReceiveNonBlocking ( UART_Type * base,
struct uart_handle * handle,
struct uart_transfer * xfer,
size_t * received_bytes )

Прием данных в асинхронном режиме (без ожидания) по прерыванию

Эта функция получает данные по прерыванию. Неблокирующая функция, которая возвращается, не дожидаясь получения всех ожидаемых данных.

Если кольцевой буфер RX используется и не пуст, данные из кольцевого буфера копируются в xfer->rx_datа, а параметр received_bytes показывает, сколько байтов скопировано из кольцевого буфера. После копирования, если данных в кольцевом буфере недостаточно для чтения, прием запрос сохраняется драйвером UART. Когда поступают новые данные, запрос на получение обслуживается в первую очередь. Когда все данные получены, драйвер UART уведомляет верхний уровень через функцию обратного вызова c параметром состояния UART_Status_RxIdle.

Например: верхнему уровню требуется 10 байтов, но в кольцевом буфере всего 5 байтов. 5 байтов копируются в данные xfer->rx_datа, и эта функция возвращается с параметром received_bytes установлен в 5. Для оставшихся 5 байтов вновь поступившие данные сохраняются в xfer->data[5..10]. При получении 5 байтов драйвер UART уведомляет верхний уровень. Если кольцевой буфер RX не включен, эта функция разрешает прерывание и RX для приема данные в xfer->data[]. Когда все данные получены, уведомляется верхний уровень.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
xferУказатель на структуру с указателем на линейный буфер приема или передачи
received_bytesУказатель на количество байтов полученных напрямую из кольцевого буфера
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_RxBusy

◆ UART_TransferSendDMA()

enum uart_status UART_TransferSendDMA ( UART_Type * base,
uart_dma_handle_t * handle,
struct uart_transfer * xfer )

Функция осуществляющая передачу данных по UART, данные в буфер попадают через DMA канал

Аргументы
baseБазовый адрес UART
handleДескриптор UART-DMA
xferСтруктура, содержащая указатель на буфер передачи и размер передаваемых данных
Возвращаемые значения
#UART_DMA_Status_InvalidArgument
#UART_DMA_Status_TxBusy
#UART_DMA_Status_DMA_Busy
#UART_DMA_Status_Fail
#UART_DMA_Status_Success

◆ UART_TransferSendNonBlocking()

enum uart_status UART_TransferSendNonBlocking ( UART_Type * base,
struct uart_handle * handle,
struct uart_transfer * xfer )

Передает буфер данных по прерыванию

Отправляет данные по прерыванию. Это неблокирующая функция, которая возвращается напрямую, не дожидаясь записи всех данных в регистр TX. Когда все данные записываются в регистр TX в обработчике IRQ, в прерывании происходит callback с передачей в него UART_Status_TxIdle в качестве параметра статуса.

Заметки
UART_Status_TxIdle передается на верхний уровень, когда все данные записаны в регистр TX. Однако это не гарантирует, что все данные будут отправлены. Перед отключением TX проверьте: чтобы убедиться, что передача завершена.
Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
xferУказатель на структуру с указателем на линейный буфер приема или передачи
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_TxBusy

◆ UART_TransferStartRingBuffer()

enum uart_status UART_TransferStartRingBuffer ( UART_Type * base,
struct uart_handle * handle,
uint8_t * ring_buffer,
size_t ring_buffer_size )

Инициализация колцевого буфера на прием

Эта функция устанавливает кольцевой буфер для заданного дескриптора UART.

Когда RX кольцевой буфер используется, полученные данные сохраняются в кольцевом буфере даже если пользователь не вызывает UART_TransferReceiveNonBlocking API. Если в кольцевом буфере уже есть данные, пользователь может получить полученные данные из кольцевого буфера напрямую.

При использовании кольцевого буфера RX один байт зарезервирован для внутреннего использования, т.е. если ring_buffer_size равно 32, то для сохранения данных используется только 31 байт.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
ring_bufferУказатель на начальный адрес кольцевого буфера для фонового приема (NULL - отключение буфера)
ring_buffer_sizeРазмер кольцевого буфера
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferStartTxRingBuffer()

enum uart_status UART_TransferStartTxRingBuffer ( UART_Type * base,
struct uart_handle * handle,
uint8_t * tx_ring_buffer,
size_t ring_buffer_size )

Инициализация колцевого буфера на передачу

Эта функция устанавливает кольцевой буфер Tx для заданного дескриптора UART.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
tx_ring_bufferУказатель на начальный адрес кольцевого буфера
ring_buffer_sizeРазмер кольцевого буфера
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferStopRingBuffer()

enum uart_status UART_TransferStopRingBuffer ( UART_Type * base,
struct uart_handle * handle )

Прерывает фоновую передачу и удаляет кольцевой буфер

Эта функция прерывает фоновую передачу и удаляет кольцевой буфер.

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_TransferStopTxRingBuffer()

enum uart_status UART_TransferStopTxRingBuffer ( UART_Type * base,
struct uart_handle * handle )

Отключение кольцевого буфера передатчика

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument

◆ UART_WaitWhileActive()

static void UART_WaitWhileActive ( UART_Type * base)
inlinestatic

Ожидание завершения передачи. Выход из функции будет осуществлен по окончании UART транзакций

Аргументы
baseБазовый адрес UART

◆ UART_WriteBlocking()

enum uart_status UART_WriteBlocking ( UART_Type * base,
const uint8_t * data,
size_t length )

Записывает в регистр TX с использованием метода блокировки

Эта функция опрашивает регистр TX, ожидает, пока регистр TX не станет пустым, или пока не появится место в TX FIFO.

Аргументы
baseУказатель на базовый адрес UART
dataУказатель на начальный адрес данных для записи
lengthРазмер записываемых данных
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_Timeout

◆ UART_WriteByte()

static void UART_WriteByte ( UART_Type * base,
uint8_t data )
inlinestatic

Записывает данные на передачу в регистр передачи

Эта функция записывает данные на передачу в регистр передачи THR. Верхний уровень должен убедиться, что в нем есть место для записи байта.

Аргументы
baseУказатель на базовый адрес UART
dataБайт для записи

◆ UART_WriteByteWait()

static void UART_WriteByteWait ( UART_Type * base,
uint8_t data )
inlinestatic

Записывает данные на передачу в регистр передачи c ожиданием освобождения места

Эта функция пишет в регистр передачи THR. Будет ожидать освобождения места для записи байта.

Аргументы
baseУказатель на базовый адрес UART
dataБайт для записи

◆ UART_WriteTxRing()

enum uart_status UART_WriteTxRing ( UART_Type * base,
struct uart_handle * handle,
const uint8_t * data,
size_t * length )

Передать линейный буфер на передачу через кольцевой буфер

Аргументы
baseУказатель на базовый адрес UART
handleУказатель на дескриптор
dataУказатель на буфер, который требуется передать
lengthОбьем байт на передачу , если не удалось поместить в кольцевой буфер весь обем данных length будет содержать непереданное кол-во байт
Возвращаемые значения
UART_Status_Ok
UART_Status_InvalidArgument
UART_Status_TxRingBufferNull