/**
******************************************************************************
* @file tae32f53xx_ll_uart.h
* @author MCD Application Team
* @brief Header file for UART LL module.
*
******************************************************************************
* @attention
*
*
© Copyright (c) 2020 Tai-Action.
* All rights reserved.
*
* This software is licensed by Tai-Action under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef _TAE32F53XX_LL_UART_H_
#define _TAE32F53XX_LL_UART_H_
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Includes ------------------------------------------------------------------*/
#include "tae32f53xx_ll_def.h"
#ifdef LL_DMA_MODULE_ENABLED
#include "tae32f53xx_ll_dma.h"
#endif
/** @addtogroup TAE32F53xx_LL_Driver
* @{
*/
/** @addtogroup UART_LL
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @defgroup UART_LL_Exported_Types UART LL Exported Types
* @brief UART LL Exported Types
* @{
*/
/**
* @brief UART interrupt ID type definition
*/
typedef enum {
UART_INT_ID_MODEM_STA = 0x0, /*!< modem status */
UART_INT_ID_NO_INT_PENDING = 0x1, /*!< no interrupt pending */
UART_INT_ID_TX_EMPTY = 0x2, /*!< THR register empty */
UART_INT_ID_RX_AVL = 0x4, /*!< received data available */
UART_INT_ID_RX_LINE_STA = 0x6, /*!< receiver line status */
UART_INT_ID_BUSY_DET = 0x7, /*!< busy detect */
UART_INT_ID_CHAR_TIMEOUT = 0xc, /*!< character timeout */
} UART_IntIdETypeDef;
/**
* @brief UART data length type definition
*/
typedef enum {
UART_DAT_LEN_5b = 0, /*!< Data length 5bits */
UART_DAT_LEN_6b = 1, /*!< Data length 6bits */
UART_DAT_LEN_7b = 2, /*!< Data length 7bits */
UART_DAT_LEN_8b = 3, /*!< Data length 8bits */
UART_DAT_LEN_9b = 4, /*!< Data length 9bits */
} UART_DatLenETypeDef;
/**
* @brief UART stop length type definition
*/
typedef enum {
UART_STOP_LEN_1b, /*!< Stop length 1bit */
UART_STOP_LEN_1b5, /*!< Stop length 1.5bit */
UART_STOP_LEN_2b, /*!< Stop length 2bits */
} UART_StopLenETypeDef;
/**
* @brief UART parity type definition
*/
typedef enum {
UART_PARITY_NO, /*!< Parity no */
UART_PARITY_ODD, /*!< Parity odd */
UART_PARITY_EVEN, /*!< Parity even */
} UART_ParityETypeDef;
/**
* @brief UART tx empty trigger level type definition
*/
typedef enum {
UART_TX_EMPTY_TRI_LVL_EMPTY = UART_TX_FIFO_TRIG_EMPTY, /*!< tx empty trigger level empty */
UART_TX_EMPTY_TRI_LVL_2CAHR = UART_TX_FIFO_TRIG_2CHAR, /*!< tx empty trigger level 2char */
UART_TX_EMPTY_TRI_LVL_QUARTER = UART_TX_FIFO_TRIG_QUARTER, /*!< tx empty trigger level quarter */
UART_TX_EMPTY_TRI_LVL_HALF = UART_TX_FIFO_TRIG_HALF, /*!< tx empty trigger level half */
} UART_TxEmptyTriLvlETypeDef;
/**
* @brief UART rx available trigger level type definition
*/
typedef enum {
UART_RX_AVL_TRI_LVL_1CHAR = UART_RX_FIFO_TRIG_1CHAR, /*!< rx available trigger level 1char */
UART_RX_AVL_TRI_LVL_QUARTER = UART_RX_FIFO_TRIG_QUARTER, /*!< rx available trigger level quarter */
UART_RX_AVL_TRI_LVL_HALF = UART_RX_FIFO_TRIG_HALF, /*!< rx available trigger level half */
UART_RX_AVL_TRI_LVL_FULL_LESS_2 = UART_RX_FIFO_TRIG_2LESS_FULL, /*!< rx available trigger level full less 2 */
} UART_RxAvlTriLvlETypeDef;
/**
* @brief UART DE polarity type definition
*/
typedef enum {
UART_DE_POL_ACT_LOW, /*!< DE polarity active low */
UART_DE_POL_ACT_HIGH, /*!< DE polarity active high */
} UART_DePolETypeDef;
/**
* @brief UART Init Structure definition
*/
typedef struct __UART_InitTypeDef {
uint32_t baudrate; /*!< baudrate */
UART_DatLenETypeDef dat_len; /*!< data length */
UART_StopLenETypeDef stop_len; /*!< stop length */
UART_ParityETypeDef parity; /*!< parity */
UART_TxEmptyTriLvlETypeDef tx_tl; /*!< tx empty trigger level */
UART_RxAvlTriLvlETypeDef rx_tl; /*!< rx available trigger level */
bool U9BAddrMatchMode_Enable; /*!< 9_bit addr match enable */
uint8_t U9BRxAddress; /*!< 9_bit Receive addr */
} UART_InitTypeDef;
/**
* @brief UART RS485 Mode Config Structure definition
*/
typedef struct __UART_Rs485CfgTypeDef {
bool de_en; /*!< DE Singal Enable control */
uint8_t de_assert_time; /*!< Driver enable assertion time */
uint8_t de_deassert_time; /*!< Driver enable de-assertion time */
UART_DePolETypeDef de_polarity; /*!< DE Singal Polarity */
} UART_Rs485CfgTypeDef;
/**
* @brief UART DMA Status
*/
typedef enum {
UART_DMA_STATE_RESET = 0, /*!< DMA State Reset: not yet initialized or disabled */
UART_DMA_STATE_READY, /*!< DMA State Ready: initialized and ready for use */
UART_DMA_STATE_BUSY, /*!< DMA State Busy: process is ongoing */
UART_DMA_STATE_ERROR, /*!< DMA State Error: process is Error */
UART_DMA_STATE_FINISH, /*!< DMA State Finish: process has been finished */
} UART_DMAStatusTypeDef;
/**
* @brief I2C frame definition
*/
typedef struct __UART_FrameTypeDef {
UART_TypeDef *Instance; /*!< UART Reg base address */
uint8_t *buf; /*!< buffer pointer */
uint16_t buf_len; /*!< buffer length */
#ifdef LL_DMA_MODULE_ENABLED
DMA_ChannelETypeDef dma_tx_ch; /*!< UART Tx DMA Channel */
DMA_ChannelETypeDef dma_rx_ch; /*!< UART Rx DMA Channel */
#endif
UART_DMAStatusTypeDef TXdma_status; /*!< UART DMA status */
UART_DMAStatusTypeDef RXdma_status; /*!< UART DMA status */
} UART_DMAHandleTypeDef;
/**
* @}
*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/** @defgroup UART_LL_Exported_Macros UART LL Exported Macros
* @brief UART LL Exported Macros
* @{
*/
/**
* @brief RX buffer 8bits read
* @param __UART__ Specifies UART peripheral
* @return 8bits read value
*/
#define __LL_UART_RxBuf8bits_Read(__UART__) (READ_BIT((__UART__)->RBR, UART_RBR_LSB_8bits_Msk))
/**
* @brief RX buffer 9bits read
* @param __UART__ Specifies UART peripheral
* @return 9bits read value
*/
#define __LL_UART_RxBuf9bits_Read(__UART__) (READ_BIT((__UART__)->RBR, UART_RBR_9bits_Msk))
/**
* @brief TX buffer 8bits write
* @param __UART__ Specifies UART peripheral
* @param val write value
* @return None
*/
#define __LL_UART_TxBuf8bits_Write(__UART__, val) \
MODIFY_REG((__UART__)->THR, UART_THR_LSB_8bits_Msk, (((val) & 0xffUL) << UART_THR_LSB_8bits_Pos))
/**
* @brief TX buffer 9bits write
* @param __UART__ Specifies UART peripheral
* @param val write value
* @return None
*/
#define __LL_UART_TxBuf9bits_Write(__UART__, val) \
MODIFY_REG((__UART__)->THR, UART_THR_9bits_Msk, (((val) & 0x1ffUL) << UART_THR_LSB_8bits_Pos))
/**
* @brief divisor latch low wirte
* @param __UART__ Specifies UART peripheral
* @param val wirte value
* @return None
*/
#define __LL_UART_DivLatchLow_Write(__UART__, val) WRITE_REG((__UART__)->DLL, (val & UART_DLL_DLL_Msk))
/**
* @brief divisor latch high wirte
* @param __UART__ Specifies UART peripheral
* @param val wirte value
* @return None
*/
#define __LL_UART_DivLatchHigh_Write(__UART__, val) WRITE_REG((__UART__)->DLH, (val & UART_DLH_DLH_Msk))
/**
* @brief programmable THRE interrupt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_THRE_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_PTIME_Msk)
/**
* @brief programmable THRE interrupt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_THRE_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_PTIME_Msk)
/**
* @brief modem status interrupt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_ModemSta_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_EDSSI_Msk)
/**
* @brief modem status interrupt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_ModemSta_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_EDSSI_Msk)
/**
* @brief RX line status interrupt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RxLineSta_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ELSI_Msk)
/**
* @brief RX line status interrupt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RxLineSta_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ELSI_Msk)
/**
* @brief TX holding register empty interrupt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxHoldEmpyt_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ETBEI_Msk)
/**
* @brief TX holding register empty interrupt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxHoldEmpyt_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ETBEI_Msk)
/**
* @brief RX data available interrupt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RxDatAvl_INT_En(__UART__) SET_BIT((__UART__)->IER, UART_IER_ERBFI_Msk)
/**
* @brief RX data available interrupt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RxDatAvl_INT_Dis(__UART__) CLEAR_BIT((__UART__)->IER, UART_IER_ERBFI_Msk)
/**
* @brief Judge is FIFOs enable or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't FIFOs enable
* @retval 3 is FIFOs enable
*/
#define __LL_UART_IsFIFOsEn(__UART__) (READ_BIT((__UART__)->IIR, UART_IIR_FIFOSE_Msk) >> UART_IIR_FIFOSE_Pos)
/**
* @brief Interrupt ID get
* @param __UART__ Specifies UART peripheral
* @return Interrupt ID
*/
#define __LL_UART_INT_ID_Get(__UART__) (READ_BIT((__UART__)->IIR, UART_IIR_IID_Msk) >> UART_IIR_IID_Pos)
/**
* @brief FCR register write
* @param __UART__ Specifies UART peripheral
* @param val write val
* @return None
*/
#define __LL_UART_FCR_Write(__UART__, val) WRITE_REG((__UART__)->FCR, val)
/**
* @brief Divisor latch access set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DivLatchAccess_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_DLAB_Msk)
/**
* @brief Divisor latch access clear
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DivLatchAccess_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_DLAB_Msk)
/**
* @brief Break control set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_BreakCtrl_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_BC_Msk)
/**
* @brief Break control clear
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_BreakCtrl_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_BC_Msk)
/**
* @brief Stick parity set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_StickParity_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_Stick_Parity_Msk)
/**
* @brief Stick parity clear
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_StickParity_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_Stick_Parity_Msk)
/**
* @brief Even parity set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_EvenParity_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_EPS_Msk)
/**
* @brief Even parity clear
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_EvenParity_Clr(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_EPS_Msk)
/**
* @brief Parity enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_Parity_En(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_PEN_Msk)
/**
* @brief Parity disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_Parity_Dis(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_PEN_Msk)
/**
* @brief Judge parity is enable or not
* @param __UART__ Specifies UART peripheral
* @retval 0 Parity isn't enable
* @retval 1 Parity is enable
*/
#define __LL_UART_IsParityEn(__UART__) (READ_BIT((__UART__)->LCR, UART_LCR_PEN_Msk) >> UART_LCR_PEN_Pos)
/**
* @brief Stop 1bit set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_Stop1Bit_Set(__UART__) CLEAR_BIT((__UART__)->LCR, UART_LCR_STOP_Msk)
/**
* @brief Stop 2bits set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_Stop2bits_Set(__UART__) SET_BIT((__UART__)->LCR, UART_LCR_STOP_Msk)
/**
* @brief Data length select
* @param __UART__ Specifies UART peripheral
* @param val select value
* @return None
*/
#define __LL_UART_DatLen_Sel(__UART__, val) MODIFY_REG((__UART__)->LCR, UART_LCR_DLS_Msk, ((val & 0x3UL) << UART_LCR_DLS_Pos))
/**
* @brief Judge is character address or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't character address
* @retval 1 is character address
*/
#define __LL_UART_IsCharacterAddr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_ADDR_RCVD_Msk) >> UART_LSR_ADDR_RCVD_Pos)
/**
* @brief Judge is RX FIFO error or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't RX FIFO error
* @retval 1 is RX FIFO error
*/
#define __LL_UART_IsRxFIFOErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_RFE_Msk) >> UART_LSR_RFE_Pos)
/**
* @brief Judge is TX empty or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't TX empty
* @retval 1 is TX empty
*/
#define __LL_UART_IsTxEmpty(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_TEMT_Msk) >> UART_LSR_TEMT_Pos)
/**
* @brief Judge is TX hold register empty or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't TX hold register empty
* @retval 1 is TX hold register empty
*/
#define __LL_UART_IsTxHoldRegEmpty(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_THRE_Msk) >> UART_LSR_THRE_Pos)
/**
* @brief Judge is break interrupt or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't break interrupt
* @retval 1 is break interrupt
*/
#define __LL_UART_IsBreakInt(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_BI_Msk) >> UART_LSR_BI_Pos)
/**
* @brief Judge is frame error or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't frame error
* @retval 1 is frame error
*/
#define __LL_UART_IsFrameErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_FE_Msk) >> UART_LSR_FE_Pos)
/**
* @brief Judge is parity error or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't parity error
* @retval 1 is parity error
*/
#define __LL_UART_IsParityErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_PE_Msk) >> UART_LSR_PE_Pos)
/**
* @brief Judge is overrun error or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't overrun error
* @retval 1 is overrun error
*/
#define __LL_UART_IsOverrunErr(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_OE_Msk) >> UART_LSR_OE_Pos)
/**
* @brief Judge is data ready or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't data ready
* @retval 1 is data ready
*/
#define __LL_UART_IsDatReady(__UART__) (READ_BIT((__UART__)->LSR, UART_LSR_DR_Msk) >> UART_LSR_DR_Pos)
/**
* @brief Line status get
* @param __UART__ Specifies UART peripheral
* @return Line status
*/
#define __LL_UART_LineSta_Get(__UART__) READ_BIT((__UART__)->LSR, UART_LSR_ALL_BIT_Msk)
/**
* @brief Judge is RXFIFO full or not
* @param __UART__ Specifies UART peripheral
* @retval 0 isn't RXFIFO full
* @retval 1 is RXFIFO full
*/
#define __LL_UART_IsRxFIFOFull(__UART__) (READ_BIT((__UART__)->USR, UART_USR_RFF_Msk) >> UART_USR_RFF_Pos)
/**
* @brief Judge is RXFIFO not empty or not
* @param __UART__ Specifies UART peripheral
* @retval 0 RXFIFO is empty
* @retval 1 RXFIFO is not empty
*/
#define __LL_UART_IsRxFIFONotEmpty(__UART__) (READ_BIT((__UART__)->USR, UART_USR_RFNE_Msk) >> UART_USR_RFNE_Pos)
/**
* @brief Judge is TXFIFO empty or not
* @param __UART__ Specifies UART peripheral
* @retval 0 TXFIFO is not empty
* @retval 1 TXFIFO is empty
*/
#define __LL_UART_IsTxFIFOEmpty(__UART__) (READ_BIT((__UART__)->USR, UART_USR_TFE_Msk) >> UART_USR_TFE_Pos)
/**
* @brief Judge is TXFIFO not full or not
* @param __UART__ Specifies UART peripheral
* @retval 0 TXFIFO is full
* @retval 1 TXFIFO is not full
*/
#define __LL_UART_IsTxFIFONotFull(__UART__) (READ_BIT((__UART__)->USR, UART_USR_TFNF_Msk) >> UART_USR_TFNF_Pos)
/**
* @brief TXFIFO level get
* @param __UART__ Specifies UART peripheral
* @return TXFIFO level
*/
#define __LL_UART_TxFIFOLevel_Get(__UART__) (READ_BIT((__UART__)->TFL, UART_TFL_TFL_Msk) >> UART_TFL_TFL_Pos)
/**
* @brief RXFIFO level get
* @param __UART__ Specifies UART peripheral
* @return RXFIFO level
*/
#define __LL_UART_RxFIFOLevel_Get(__UART__) (READ_BIT((__UART__)->RFL, UART_RFL_RFL_Msk) >> UART_RFL_RFL_Pos)
/**
* @brief TX halt enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxHalt_En(__UART__) SET_BIT((__UART__)->HTX, UART_HTX_HTX_Msk)
/**
* @brief TX halt disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxHalt_Dis(__UART__) CLEAR_BIT((__UART__)->HTX, UART_HTX_HTX_Msk)
/**
* @brief TX mode set
* @param __UART__ Specifies UART peripheral
* @param mode tx mode
* @return None
*/
#define __LL_UART_TxMode_Set(__UART__, mode) MODIFY_REG((__UART__)->TCR, UART_TCR_XFER_MODE_Msk, mode)
/**
* @brief DE signal active high set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DE_ActHigh_Set(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_DE_POL_Msk)
/**
* @brief DE signal active low set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DE_ActLow_Set(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_DE_POL_Msk)
/**
* @brief RE signal active high set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RE_ActHigh_Set(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_RE_POL_Msk)
/**
* @brief RE signal active low set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RE_ActLow_Set(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_RE_POL_Msk)
/**
* @brief RS485 mode enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RS485Mode_En(__UART__) SET_BIT((__UART__)->TCR, UART_TCR_RS485_EN_Msk)
/**
* @brief RS485 mode disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RS485Mode_Dis(__UART__) CLEAR_BIT((__UART__)->TCR, UART_TCR_RS485_EN_Msk)
/**
* @brief DE enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DE_En(__UART__) SET_BIT((__UART__)->DE_EN, UART_DE_EN_DE_EN_Msk)
/**
* @brief DE disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DE_Dis(__UART__) CLEAR_BIT((__UART__)->DE_EN, UART_DE_EN_DE_EN_Msk)
/**
* @brief RE enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_RE_En(__UART__) SET_BIT((__UART__)->RE_EN, UART_RE_EN_RE_EN_Msk)
/**
* @brief DE deassertion time set
* @param __UART__ Specifies UART peripheral
* @param val set value
* @return None
*/
#define __LL_UART_DE_DeAssertTime_Set(__UART__, val) \
MODIFY_REG((__UART__)->DET, UART_DET_DE_DEASSERT_TIME_Msk, ((val & 0xffUL) << UART_DET_DE_DEASSERT_TIME_Pos))
/**
* @brief DE assertion time set
* @param __UART__ Specifies UART peripheral
* @param val set value
* @return None
*/
#define __LL_UART_DE_AssertTime_Set(__UART__, val) \
MODIFY_REG((__UART__)->DET, UART_DET_DE_ASSERT_TIME_Msk, ((val & 0xffUL) << UART_DET_DE_ASSERT_TIME_Pos))
/**
* @brief RE to DE turn around time set
* @param __UART__ Specifies UART peripheral
* @param val set value
* @return None
*/
#define __LL_UART_REtoDE_TurnAroundTime_Set(__UART__, val) \
MODIFY_REG((__UART__)->TAT, UART_TAT_RE_TO_DE_TIME_Msk, ((val & 0xffffUL) << UART_TAT_RE_TO_DE_TIME_Pos))
/**
* @brief DE to RE turn around time set
* @param __UART__ Specifies UART peripheral
* @param val set value
* @return None
*/
#define __LL_UART_DEtoRE_TurnAroundTime_Set(__UART__, val) \
MODIFY_REG((__UART__)->TAT, UART_TAT_DE_TO_RE_TIME_Msk, ((val & 0xffffUL) << UART_TAT_DE_TO_RE_TIME_Pos))
/**
* @brief Divisor latch fraction set
* @param __UART__ Specifies UART peripheral
* @param val set value
* @return None
*/
#define __LL_UART_DivLatchFrac_Set(__UART__, val) MODIFY_REG((__UART__)->DLF, UART_DLF_DLF_Msk, ((val & 0xfUL) << UART_DLF_DLF_Pos))
/**
* @brief RAR set
* @param __UART__ Specifies UART peripheral
* @param addr set address
* @return None
*/
#define __LL_UART_RAR_Set(__UART__, addr) MODIFY_REG((__UART__)->RAR, UART_RAR_RAR_Msk, ((addr & 0xffUL) << UART_RAR_RAR_Pos))
/**
* @brief TAR set
* @param __UART__ Specifies UART peripheral
* @param addr set address
* @return None
*/
#define __LL_UART_TAR_Set(__UART__, addr) MODIFY_REG((__UART__)->TAR, UART_TAR_TAR_Msk, ((addr & 0xffUL) << UART_TAR_TAR_Pos))
/**
* @brief TX mode 9bits set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxMode9bits_Set(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk)
/**
* @brief TX mode 8bits set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_TxMode8bits_Set(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk)
/**
* @brief TX mode status get
* @param __UART__ Specifies UART peripheral
* @retval 0 TX mode is 8bits
* @retval 1 TX mode is 9bits
*/
#define __LL_UART_TxModeSta_Get(__UART__) \
(READ_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_TRANSMIT_MODE_Msk) >> UART_LCR_EXT_TRANSMIT_MODE_Pos)
/**
* @brief Send address set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_SendAddr_Start(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_SEND_ADDR_Msk)
/**
* @brief Send data set
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_SendDat_Start(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_SEND_ADDR_Msk)
/**
* @brief Address match mode enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_AddrMatchMode_En(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_ADDR_MATCH_Msk)
/**
* @brief Address match mode disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_AddrMatchMode_Dis(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_ADDR_MATCH_Msk)
/**
* @brief Data length extension 9bits enable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DatLen9bitsExt_En(__UART__) SET_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk)
/**
* @brief Data length extension 9bits disable
* @param __UART__ Specifies UART peripheral
* @return None
*/
#define __LL_UART_DatLen9bitsExt_Dis(__UART__) CLEAR_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk)
/**
* @brief Judge data length extension 9bits is enable or not
* @param __UART__ Specifies UART peripheral
* @retval 0 Data length extension 9bits isn't enable
* @retval 1 Data length extension 9bits is enable
*/
#define __LL_UART_IsDatLen9bitsEn(__UART__) (READ_BIT((__UART__)->LCR_EXT, UART_LCR_EXT_DLS_E_Msk) >> UART_LCR_EXT_DLS_E_Pos)
/**
* @}
*/
/* Exported functions --------------------------------------------------------*/
/** @addtogroup UART_LL_Exported_Functions
* @{
*/
/** @addtogroup UART_LL_Exported_Functions_Group1
* @{
*/
LL_StatusETypeDef LL_UART_Init(UART_TypeDef *Instance, UART_InitTypeDef *Init);
LL_StatusETypeDef LL_UART_DeInit(UART_TypeDef *Instance);
void LL_UART_MspInit(UART_TypeDef *Instance);
void LL_UART_MspDeInit(UART_TypeDef *Instance);
/**
* @}
*/
/** @addtogroup UART_LL_Exported_Functions_Group2
* @{
*/
LL_StatusETypeDef LL_UART_Transmit_CPU(UART_TypeDef *Instance, uint8_t *pData, uint16_t Size, uint32_t Timeout);
LL_StatusETypeDef LL_UART_Receive_CPU(UART_TypeDef *Instance, uint8_t *pData, uint16_t Size, uint32_t Timeout);
LL_StatusETypeDef LL_UART_Transmit_IT(UART_TypeDef *Instance);
LL_StatusETypeDef LL_UART_Receive_IT(UART_TypeDef *Instance);
#ifdef LL_DMA_MODULE_ENABLED
LL_StatusETypeDef LL_UART_Transmit_DMA(UART_TypeDef *Instance, DMA_UserCfgTypeDef *dma_user_cfg,
UART_DMAHandleTypeDef *huart, uint32_t Timeout);
LL_StatusETypeDef LL_UART_Receive_DMA(UART_TypeDef *Instance, DMA_UserCfgTypeDef *dma_user_cfg,
UART_DMAHandleTypeDef *huart, uint32_t Timeout);
#endif
/**
* @}
*/
/** @addtogroup UART_LL_Exported_Functions_Group3
* @{
*/
LL_StatusETypeDef LL_Uart_9bit_SendAddress(UART_TypeDef *Instance, uint8_t TxAddr);
LL_StatusETypeDef LL_UART_RS485Cfg(UART_TypeDef *Instance, UART_Rs485CfgTypeDef *cfg);
uint8_t LL_UART_TxFIFOLVL_GET(UART_TypeDef *Instance);
uint8_t LL_UART_RxFIFOLVL_GET(UART_TypeDef *Instance);
/**
* @}
*/
/** @addtogroup UART_LL_Exported_Functions_Interrupt
* @{
*/
void LL_UART_IRQHandler(UART_TypeDef *Instance);
void LL_UART_ModemStaCallback(UART_TypeDef *Instance);
void LL_UART_TxEmptyCallback(UART_TypeDef *Instance);
void LL_UART_RxAvailableCallback(UART_TypeDef *Instance);
void LL_UART_RxLineStaCallback(UART_TypeDef *Instance);
void LL_UART_BusyDetCallback(UART_TypeDef *Instance);
void LL_UART_CharTimeOutCallback(UART_TypeDef *Instance);
void LL_UART_BreakErrCallback(UART_TypeDef *Instance);
void LL_UART_FrameErrCallback(UART_TypeDef *Instance);
void LL_UART_ParityErrCallback(UART_TypeDef *Instance);
void LL_UART_RxOverrunErrCallback(UART_TypeDef *Instance);
/**
* @}
*/
/**
* @}
*/
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
/* Private macros ------------------------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/**
* @}
*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* _TAE32F53XX_LL_UART_H_ */
/************************* (C) COPYRIGHT Tai-Action *****END OF FILE***********/