Files
VK035_Template/platform/plib035/inc/plib035_uart.h

607 lines
24 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
******************************************************************************
* @file plib035_uart.h
*
* @brief Файл содержит прототипы и компактные inline реализации функций для
* UART, а также сопутствующие макроопределения и перечисления
*
* @author НИИЭТ, Богдан Колбов <kolbov@niiet.ru>
*
******************************************************************************
* @attention
*
* ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО
* ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ ГАРАНТИИ ТОВАРНОЙ
* ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ
* НАРУШЕНИЙ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ. ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
* ПРЕДНАЗНАЧЕНО ДЛЯ ОЗНАКОМИТЕЛЬНЫХ ЦЕЛЕЙ И НАПРАВЛЕНО ТОЛЬКО НА
* ПРЕДОСТАВЛЕНИЕ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ О ПРОДУКТЕ, С ЦЕЛЬЮ СОХРАНИТЬ ВРЕМЯ
* ПОТРЕБИТЕЛЮ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ
* ОТВЕТСТВЕННОСТИ ПО КАКИМ-ЛИБО ИСКАМ, ЗА ПРЯМОЙ ИЛИ КОСВЕННЫЙ УЩЕРБ, ИЛИ
* ПО ИНЫМ ТРЕБОВАНИЯМ, ВОЗНИКШИМ ИЗ-ЗА ИСПОЛЬЗОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
* ИЛИ ИНЫХ ДЕЙСТВИЙ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
*
* <h2><center>&copy; 2018 ОАО "НИИЭТ"</center></h2>
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __PLIB035_UART_H
#define __PLIB035_UART_H
#ifdef __cplusplus
extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
#include "plib035.h"
/** @addtogroup Peripheral
* @{
*/
/** @defgroup UART
* @brief Драйвер для работы с UART
* @{
*/
/** @defgroup UART_Exported_Defines Константы
* @{
*/
/** @defgroup UART_ITSource_Define Источники прерываний UART
* @{
*/
#define UART_ITSource_RxFIFOLevel UART_IMSC_RXIM_Msk /*!< Порог переполнения буфера приемника */
#define UART_ITSource_TxFIFOLevel UART_IMSC_TXIM_Msk /*!< Порог опустошения буфера передатчика */
#define UART_ITSource_RecieveTimeout UART_IMSC_RTIM_Msk /*!< Таймаут приема данных */
#define UART_ITSource_ErrorFrame UART_IMSC_FEIM_Msk /*!< Ошибка в структуре кадра */
#define UART_ITSource_ErrorParity UART_IMSC_PEIM_Msk /*!< Ошибка контроля четности */
#define UART_ITSource_ErrorBreak UART_IMSC_BEIM_Msk /*!< Разрыв линии */
#define UART_ITSource_ErrorOverflow UART_IMSC_OEIM_Msk /*!< Переполнение буффера приемника */
#define UART_ITSource_TransmitDone UART_IMSC_TDIM_Msk /*!< Окончание передачи в линии */
#define UART_ITSource_All (UART_IMSC_RXIM_Msk | \
UART_IMSC_TXIM_Msk | \
UART_IMSC_RTIM_Msk | \
UART_IMSC_FEIM_Msk | \
UART_IMSC_PEIM_Msk | \
UART_IMSC_BEIM_Msk | \
UART_IMSC_OEIM_Msk | \
UART_IMSC_TDIM_Msk) /*!< Все источники выбраны */
#define IS_UART_IT_SOURCE(VALUE) (((VALUE) & ~UART_ITSource_All) == 0)
/**
* @}
*/
/** @defgroup UART_Flag_Define Флаги работы UART
* @{
*/
#define UART_Flag_Busy UART_FR_BUSY_Msk /*!< Флаг занятости блока UART */
#define UART_Flag_RxFIFOEmpty UART_FR_RXFE_Msk /*!< Флаг пустоты буффера приемника */
#define UART_Flag_TxFIFOFull UART_FR_TXFF_Msk /*!< Флаг заполнения буффера передатчика */
#define UART_Flag_RxFIFOFull UART_FR_RXFF_Msk /*!< Флаг заполнения буффера приемника */
#define UART_Flag_TxFIFOEmpty UART_FR_TXFE_Msk /*!< Флаг пустоты буффера передатчика */
#define UART_Flag_All (UART_FR_BUSY_Msk | \
UART_FR_RXFE_Msk | \
UART_FR_TXFF_Msk | \
UART_FR_RXFF_Msk | \
UART_FR_TXFE_Msk) /*!< Все флаги выбраны */
#define IS_UART_FLAG(VALUE) (((VALUE) & ~UART_Flag_All) == 0)
/**
* @}
*/
/** @defgroup UART_Error_Define Ошибки приемника UART
* @{
*/
#define UART_Error_Frame UART_RSR_FE_Msk /*!< Флаг ошибки в структуре кадра */
#define UART_Error_Parity UART_RSR_PE_Msk /*!< Флаг ошибки контроля четности */
#define UART_Error_Break UART_RSR_BE_Msk /*!< Флаг разрыва линии */
#define UART_Error_Overflow UART_RSR_OE_Msk /*!< Флаг переполнения буффера приемника */
#define UART_Error_All (UART_RSR_FE_Msk | \
UART_RSR_PE_Msk | \
UART_RSR_BE_Msk | \
UART_RSR_OE_Msk) /*!< Все флаги ошибок выбраны */
#define IS_UART_ERROR(VALUE) (((VALUE) & ~UART_Error_All) == 0)
/**
* @}
*/
/**
* @}
*/
/** @defgroup UART_Exported_Types Типы
* @{
*/
#define IS_UART_INT_DIV(VALUE) (((VALUE) > 0) && ((VALUE) < 0x10000))
#define IS_UART_FRAC_DIV(VALUE) ((VALUE) < 0x40)
#define IS_UART_DATA(VALUE) ((VALUE) < 0x100)
/**
* @brief Выбор режима передачи стопового бита
*/
typedef enum {
UART_StopBit_1, /*!< Один стоповый бит */
UART_StopBit_2 /*!< Два стоповых бита */
} UART_StopBit_TypeDef;
#define IS_UART_STOP_BIT(VALUE) (((VALUE) == UART_StopBit_1) || \
((VALUE) == UART_StopBit_2))
/**
* @brief Выбор режима бита четности
*/
typedef enum {
UART_ParityBit_Disable = 0, /*!< Не передается, не проверяется */
UART_ParityBit_Odd = UART_LCRH_PEN_Msk, /*!< Проверка нечетности данных */
UART_ParityBit_Even = UART_LCRH_PEN_Msk | UART_LCRH_EPS_Msk, /*!< Проверка четности данных */
UART_ParityBit_High = UART_LCRH_PEN_Msk | UART_LCRH_SPS_Msk, /*!< Бит четности постоянно равен единице */
UART_ParityBit_Low = UART_LCRH_PEN_Msk | UART_LCRH_SPS_Msk | UART_LCRH_EPS_Msk /*!< Бит четности постоянно равен нулю */
} UART_ParityBit_TypeDef;
#define IS_UART_PARITY_BIT(VALUE) (((VALUE) == UART_ParityBit_Disable) || \
((VALUE) == UART_ParityBit_Odd) || \
((VALUE) == UART_ParityBit_Even) || \
((VALUE) == UART_ParityBit_High) || \
((VALUE) == UART_ParityBit_Low))
/**
* @brief Количество передаваемых/принимаемых информационных бит
*/
typedef enum {
UART_DataWidth_5 = UART_LCRH_WLEN_5bit, /*!< Длина информационного слова 5 бит */
UART_DataWidth_6 = UART_LCRH_WLEN_6bit, /*!< Длина информационного слова 6 бит */
UART_DataWidth_7 = UART_LCRH_WLEN_7bit, /*!< Длина информационного слова 7 бит */
UART_DataWidth_8 = UART_LCRH_WLEN_8bit /*!< Длина информационного слова 8 бит */
} UART_DataWidth_TypeDef;
#define IS_UART_DATA_WIDTH(VALUE) (((VALUE) == UART_DataWidth_5) || \
((VALUE) == UART_DataWidth_6) || \
((VALUE) == UART_DataWidth_7) || \
((VALUE) == UART_DataWidth_8))
/**
* @brief Порог заполнения/опустошения буфера приемника/передатчика, по достижению которого
* будет генерироваться прерывание
*/
typedef enum {
UART_FIFOLevel_1_8 = UART_IFLS_TXIFLSEL_Lvl18, /*!< Заполнение/опустошение FIFO на 1/8 */
UART_FIFOLevel_1_4 = UART_IFLS_TXIFLSEL_Lvl14, /*!< Заполнение/опустошение FIFO на 1/4 */
UART_FIFOLevel_1_2 = UART_IFLS_TXIFLSEL_Lvl12, /*!< Заполнение/опустошение FIFO на 1/2 */
UART_FIFOLevel_3_4 = UART_IFLS_TXIFLSEL_Lvl34, /*!< Заполнение/опустошение FIFO на 3/4 */
UART_FIFOLevel_7_8 = UART_IFLS_TXIFLSEL_Lvl78 /*!< Заполнение/опустошение FIFO на 7/8 */
} UART_FIFOLevel_TypeDef;
#define IS_UART_FIFO_LEVEL(VALUE) (((VALUE) == UART_FIFOLevel_1_8) || \
((VALUE) == UART_FIFOLevel_1_4) || \
((VALUE) == UART_FIFOLevel_1_2) || \
((VALUE) == UART_FIFOLevel_3_4) || \
((VALUE) == UART_FIFOLevel_7_8))
/**
* @brief Структура инициализации UART
*/
typedef struct
{
UART_StopBit_TypeDef StopBit; /*!< Выбор режима передачи стопового бита */
UART_ParityBit_TypeDef ParityBit; /*!< Выбор режима бита четности */
UART_DataWidth_TypeDef DataWidth; /*!< Количество передаваемых/принимаемых информационных бит */
uint32_t BaudRate; /*!< Желаемая скорость передачи данных в бит/с */
FunctionalState FIFO; /*!< Разрешение режима FIFO буфера приемника и передатчика */
FunctionalState Rx; /*!< Разрешение приема */
FunctionalState Tx; /*!< Разрешение передачи */
} UART_Init_TypeDef;
/**
* @}
*/
/** @defgroup UART_Exported_Functions Функции
* @{
*/
void UART_AutoBaudConfig(UART_TypeDef* UARTx, uint32_t BaudRate);
/**
* @brief Разрешение работы выбранного UART
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_Cmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->CR_bit.UARTEN, State);
}
/**
* @brief Настройка ширины слова данных
* @param UARTx Выбор модуля UART, где x=0|1
* @param DataWidth Значение разрядности слова
* @retval void
*/
__STATIC_INLINE void UART_DataWidthConfig(UART_TypeDef* UARTx, UART_DataWidth_TypeDef DataWidth)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_DATA_WIDTH(DataWidth));
WRITE_REG(UARTx->LCRH_bit.WLEN, DataWidth);
}
/**
* @brief Настройка количества стоп-бит
* @param UARTx Выбор модуля UART, где x=0|1
* @param StopBit Количество стоп-бит
* @retval void
*/
__STATIC_INLINE void UART_StopBitConfig(UART_TypeDef* UARTx, UART_StopBit_TypeDef StopBit)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_STOP_BIT(StopBit));
WRITE_REG(UARTx->LCRH_bit.STP2, StopBit);
}
/**
* @brief Настройка режима бита четности
* @param UARTx Выбор модуля UART, где x=0|1
* @param ParityBit Режим
* @retval void
*/
__STATIC_INLINE void UART_ParityBitConfig(UART_TypeDef* UARTx, UART_ParityBit_TypeDef ParityBit)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_PARITY_BIT(ParityBit));
MODIFY_REG(UARTx->LCRH, UART_LCRH_PEN_Msk | UART_LCRH_SPS_Msk | UART_LCRH_EPS_Msk, ParityBit);
}
/**
* @brief Ручная настройка делителя для реализации необходимой скорости передачи
* @param UARTx Выбор модуля UART, где x=0|1
* @param IntDiv Целая часть делителя.
* Параметр принимает любое значение из диапазона 1-65535.
* @param FracDiv Дробная часть делителя.
* Параметр принимает любое значение из диапазона 0-63. В случае, если IntDiv
* равен 65535, значение FracDiv может быть только 0.
* @retval void
*/
__STATIC_INLINE void UART_BaudDivConfig(UART_TypeDef* UARTx, uint32_t IntDiv, uint32_t FracDiv)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_INT_DIV(IntDiv));
assert_param(IS_UART_FRAC_DIV(FracDiv));
WRITE_REG(UARTx->IBRD, IntDiv);
WRITE_REG(UARTx->FBRD, FracDiv);
}
/**
* @brief Включение разрыва линии
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_BreakCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->LCRH_bit.BRK, State);
}
/**
* @brief Включение FIFO
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_FIFOCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->LCRH_bit.FEN, State);
}
/**
* @brief Разрешение приема
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_RxCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->CR_bit.RXE, State);
}
/**
* @brief Разрешение передачи
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_TxCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->CR_bit.TXE, State);
}
/** @defgroup UART_Init_Deinit Инициализация и деинициализация
* @{
*/
void UART_DeInit(UART_TypeDef* UARTx);
void UART_Init(UART_TypeDef* UARTx, UART_Init_TypeDef* InitStruct);
void UART_StructInit(UART_Init_TypeDef* InitStruct);
/**
* @}
*/
/** @defgroup UART_SendRecieve Прием и передача
* @{
*/
/**
* @brief Передача слова данных
* @param UARTx Выбор модуля UART, где x=0|1
* @param Data Слово данных (биты 7-0)
* @retval void
*/
__STATIC_INLINE void UART_SendData(UART_TypeDef* UARTx, uint32_t Data)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_DATA(Data));
WRITE_REG(UARTx->DR, Data);
}
/**
* @brief Прием слова данных
* @param UARTx Выбор модуля UART, где x=0|1
* @retval Val Слово данных
*/
__STATIC_INLINE uint32_t UART_RecieveData(UART_TypeDef* UARTx)
{
assert_param(IS_UART_PERIPH(UARTx));
return READ_REG(UARTx->DR_bit.DATA);
}
/**
* @brief Запрос состояния выбранного флага
* @param UARTx Выбор модуля UART, где x=0|1
* @param Flag Выбор флагов.
* Параметр принимает любую совокупность значений UART_Flag_x из @ref UART_Flag_Define.
* @retval Status Состояние флага. Если выбрано несколько флагов,
* то результат соответсвует логическому ИЛИ их состояний.
*/
__STATIC_INLINE FlagStatus UART_FlagStatus(UART_TypeDef* UARTx, uint32_t Flag)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_FLAG(Flag));
return (FlagStatus)READ_BIT(UARTx->FR, Flag);
}
/**
* @brief Запрос состояния выбранного флага ошибки
* @param UARTx Выбор модуля UART, где x=0|1
* @param Error Выбор флагов ошибки.
* Параметр принимает любую совокупность значений UART_Error_x из @ref UART_Error_Define.
* @retval Status Состояние флага. Если выбрано несколько флагов,
* то результат соответсвует логическому ИЛИ их состояний.
*/
__STATIC_INLINE FlagStatus UART_ErrorStatus(UART_TypeDef* UARTx, uint32_t Error)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_ERROR(Error));
return (FlagStatus)READ_BIT(UARTx->RSR, Error);
}
/**
* @brief Очистка флагов ошибки
* @param UARTx Выбор модуля UART, где x=0|1
* @param Error Выбор флагов ошибки.
* Параметр принимает любую совокупность значений UART_Error_x из @ref UART_Error_Define.
* @retval void
*/
__STATIC_INLINE void UART_ErrorStatusClear(UART_TypeDef* UARTx, uint32_t Error)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_ERROR(Error));
WRITE_REG(UARTx->RSR, Error);
}
/**
* @}
*/
/** @defgroup UART_IT Прерывания
* @{
*/
/**
* @brief Настройка порога заполнения FIFO при приёме для генерации прерывания
* @param UARTx Выбор модуля UART, где x=0|1
* @param FIFOLevelRx Порог
* @retval void
*/
__STATIC_INLINE void UART_ITFIFOLevelRxConfig(UART_TypeDef* UARTx, UART_FIFOLevel_TypeDef FIFOLevelRx)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_FIFO_LEVEL(FIFOLevelRx));
WRITE_REG(UARTx->IFLS_bit.RXIFLSEL, FIFOLevelRx);
}
/**
* @brief Настройка порога опустошения FIFO при передаче для генерации прерывания
* @param UARTx Выбор модуля UART, где x=0|1
* @param FIFOLevelTx Порог
* @retval void
*/
__STATIC_INLINE void UART_ITFIFOLevelTxConfig(UART_TypeDef* UARTx, UART_FIFOLevel_TypeDef FIFOLevelTx)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_FIFO_LEVEL(FIFOLevelTx));
WRITE_REG(UARTx->IFLS_bit.TXIFLSEL, FIFOLevelTx);
}
/**
* @brief Маскирование выбранных прерываний
* @param UARTx Выбор модуля UART, где x=0|1
* @param ITSource Выбор прерываний.
* Параметр принимает любую совокупность значений UART_ITSource_x из @ref UART_ITSource_Define.
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_ITCmd(UART_TypeDef* UARTx, uint32_t ITSource, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_IT_SOURCE(ITSource));
MODIFY_REG(UARTx->IMSC, ITSource, State ? ITSource : 0);
}
/**
* @brief Запрос немаскированного состояния прерывания
* @param UARTx Выбор модуля UART, где x=0|1
* @param ITSource Выбор прерываний.
* Параметр принимает любую совокупность значений UART_ITSource_x из @ref UART_ITSource_Define.
* @retval Status Состояние флага. Если выбрано несколько прерываний,
* то результат соответсвует логическому ИЛИ их состояний.
*/
__STATIC_INLINE FlagStatus UART_ITRawStatus(UART_TypeDef* UARTx, uint32_t ITSource)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_IT_SOURCE(ITSource));
return (FlagStatus)READ_BIT(UARTx->RIS, ITSource);
}
/**
* @brief Запрос маскированного состояния прерывания
* @param UARTx Выбор модуля UART, где x=0|1
* @param ITSource Выбор прерываний.
* Параметр принимает любую совокупность значений UART_ITSource_x из @ref UART_ITSource_Define.
* @retval Status Состояние флага. Если выбрано несколько прерываний,
* то результат соответсвует логическому ИЛИ их состояний.
*/
__STATIC_INLINE FlagStatus UART_ITMaskedStatus(UART_TypeDef* UARTx, uint32_t ITSource)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_IT_SOURCE(ITSource));
return (FlagStatus)READ_BIT(UARTx->MIS, ITSource);
}
/**
* @brief Сброс флагов состояния выбранных прерываний
* @param UARTx Выбор модуля UART, где x=0|1
* @param ITSource Выбор прерываний.
* Параметр принимает любую совокупность значений UART_ITSource_x из @ref UART_ITSource_Define.
* @retval void
*/
__STATIC_INLINE void UART_ITStatusClear(UART_TypeDef* UARTx, uint32_t ITSource)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_UART_IT_SOURCE(ITSource));
WRITE_REG(UARTx->ICR, ITSource);
}
/**
* @}
*/
/** @defgroup UART_DMA Настройка DMA
* @{
*/
/**
* @brief Управление блокированием запросов DMA от приемника в случае возникновения
* прерывания по ошибке
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_DMABlkOnErrCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->DMACR_bit.DMAONERR, State);
}
/**
* @brief Разрешение формирования запросов DMA для обслуживания буфера приемника
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_DMARxCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->DMACR_bit.RXDMAE, State);
}
/**
* @brief Разрешение формирования запросов DMA для обслуживания буфера передатчика
* @param UARTx Выбор модуля UART, где x=0|1
* @param State Выбор состояния
* @retval void
*/
__STATIC_INLINE void UART_DMATxCmd(UART_TypeDef* UARTx, FunctionalState State)
{
assert_param(IS_UART_PERIPH(UARTx));
assert_param(IS_FUNCTIONAL_STATE(State));
WRITE_REG(UARTx->DMACR_bit.TXDMAE, State);
}
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __PLIB035_UART_H */
/**
* @}
*/
/**
* @}
*/
/******************* (C) COPYRIGHT 2018 NIIET *****END OF FILE****/