Интерфейс предназначен для организации связи с другими цифровыми устройствами
Подробнее...
|
|
#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) |
| | Функция обратного вызова
|
| |
|
| 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.
|
| |
|
| 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) |
| | Отключение кольцевого буфера передатчика
|
| |
Интерфейс предназначен для организации связи с другими цифровыми устройствами
Драйвер позволяет производить приемо/передачу по последовательному асинхронному интерфейсу в режиме ожидания (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()
Деинициализирует модуль UART.
Функция ожидает завершения передачи, отключает передачу и прием и отключает синхронизацию модуля UART.
- Возвращаемые значения
-
◆ 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()
Получает структуру конфигурации по умолчанию
Эта функция инициализирует структуру конфигурации UART значением по умолчанию:
config->baudrate_bps = 115200U;
config->enable_parity = false;
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;
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_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()
Инициализирует модуль UART структурой конфигурации пользователя и частотой периферии
Эта функция конфигурирует модуль UART с пользовательскими настройками. Пользователь может настроить конфигурацию структуры, а также получить конфигурацию по умолчанию с помощью функции UART_GetDefaultConfig.
Пример ниже показывает, как использовать эту функцию для настройки UART:
config->baudrate_bps = 115200U;
config->enable_parity = false;
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;
- Аргументы
-
| base | Указатель на базовый адрес UART |
| config | Указатель на определяемую пользователем структуру конфигурации |
| src_clock_hz | Тактовая частота источника в Гц |
- Возвращаемые значения
-
◆ 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_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()
Установка режима работы RS485.
- Аргументы
-
◆ UART_SetBaudRate()
| enum uart_status UART_SetBaudRate |
( |
UART_Type * | base, |
|
|
uint32_t | baudrate_bps, |
|
|
uint32_t | src_clock_hz ) |
Устанавливает скорость модуля UART.
Эта функция настраивает скорость передачи модуля UART. Используется для обновления скорости модуля после его инициализации с помощью UART_Init :
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_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()
Устанавливает триггер уровня заполненности RxFIFO.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| water | Триггер уровня заполненности RxFIFO |
◆ UART_SetTxFifoWatermark()
Устанавливает триггер уровня заполненности TxFIFO.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| water | Триггер уровня заполненности TxFIFO |
◆ UART_TransferAbortReceive()
Отмена приема данных по прерыванию через линейный буфер в дескрипторе
Не оказывает никакого влияния на работу кольцевого буфера. Для отмены приема через кольцевой буффер используется UART_TransferStopRingBuffer. Пользователь может взять handle->rx_data_size, чтобы узнать сколько еще не принято.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
- Возвращаемые значения
-
◆ UART_TransferAbortReceiveDMA()
Функция прерывающая передачу данных между UART(RX) и DMA.
- Аргументы
-
| base | Базовый адрес UART |
| handle | Дескриптор UART-DMA |
◆ UART_TransferAbortSend()
Останавливает передачу данных, управляемую прерыванием
Эта функция останавливает отправку данных, управляемую прерыванием. Пользователь может получить остаток, чтобы узнать сколько байтов еще не отправлено.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
- Возвращаемые значения
-
◆ UART_TransferAbortSendDMA()
Функция прерывающая передачу данных между UART(TX) и DMA.
- Аргументы
-
| base | Базовый адрес UART |
| handle | Дескриптор UART-DMA |
◆ UART_TransferCreateHandle()
Инициализирует дескриптор UART.
Для указанного экземпляра UART требуется вызвать эту функцию единожды, чтобы получить инициализированный дескриптор.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
| callback | Указатель на функцию обратного вызова |
| user_data | Указатель на параметр функции обратного вызова |
- Возвращаемые значения
-
◆ UART_TransferCreateHandleDMA()
Функция для инициализации полей дескриптора 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_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_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()
Функция осуществляющая передачу данных по 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()
Прием данных в асинхронном режиме (без ожидания) по прерыванию
Эта функция получает данные по прерыванию. Неблокирующая функция, которая возвращается, не дожидаясь получения всех ожидаемых данных.
Если кольцевой буфер 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_TransferSendDMA()
Функция осуществляющая передачу данных по 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()
Передает буфер данных по прерыванию
Отправляет данные по прерыванию. Это неблокирующая функция, которая возвращается напрямую, не дожидаясь записи всех данных в регистр TX. Когда все данные записываются в регистр TX в обработчике IRQ, в прерывании происходит callback с передачей в него UART_Status_TxIdle в качестве параметра статуса.
- Заметки
- UART_Status_TxIdle передается на верхний уровень, когда все данные записаны в регистр TX. Однако это не гарантирует, что все данные будут отправлены. Перед отключением TX проверьте: чтобы убедиться, что передача завершена.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
| xfer | Указатель на структуру с указателем на линейный буфер приема или передачи |
- Возвращаемые значения
-
◆ 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_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_TransferStopRingBuffer()
Прерывает фоновую передачу и удаляет кольцевой буфер
Эта функция прерывает фоновую передачу и удаляет кольцевой буфер.
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
- Возвращаемые значения
-
◆ UART_TransferStopTxRingBuffer()
Отключение кольцевого буфера передатчика
- Аргументы
-
| base | Указатель на базовый адрес UART |
| handle | Указатель на дескриптор |
- Возвращаемые значения
-
◆ UART_WaitWhileActive()
| static void UART_WaitWhileActive |
( |
UART_Type * | base | ) |
|
|
inlinestatic |
Ожидание завершения передачи. Выход из функции будет осуществлен по окончании 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_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 будет содержать непереданное кол-во байт
|
- Возвращаемые значения
-