初始版本
This commit is contained in:
@@ -0,0 +1,422 @@
|
||||
/**
|
||||
*******************************************************************************
|
||||
* @file hc32_ll_usart.h
|
||||
* @brief This file contains all the functions prototypes of the USART(Universal
|
||||
* Synchronous/Asynchronous Receiver Transmitter) driver library.
|
||||
@verbatim
|
||||
Change Logs:
|
||||
Date Author Notes
|
||||
2022-03-31 CDT First version
|
||||
2023-06-30 CDT Modify typo
|
||||
Change macro-definition: USART_DR_MPID -> USART_TDR_MPID
|
||||
Modify USART_SetTransType parameter: u32Type -> u16Type
|
||||
Modify USART_SC_ETU_CLK128/256 value
|
||||
Modify return type of function USART_DeInit
|
||||
2023-09-30 CDT Remove u32StopBit param from stc_usart_smartcard_init_t structure
|
||||
@endverbatim
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2022-2023, Xiaohua Semiconductor Co., Ltd. All rights reserved.
|
||||
*
|
||||
* This software component is licensed by XHSC 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
|
||||
*
|
||||
*******************************************************************************
|
||||
*/
|
||||
#ifndef __HC32_LL_USART_H__
|
||||
#define __HC32_LL_USART_H__
|
||||
|
||||
/* C binding of definitions if building with C++ compiler */
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Include files
|
||||
******************************************************************************/
|
||||
#include "hc32_ll_def.h"
|
||||
|
||||
#include "hc32f4xx.h"
|
||||
#include "hc32f4xx_conf.h"
|
||||
|
||||
/**
|
||||
* @addtogroup LL_Driver
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup LL_USART
|
||||
* @{
|
||||
*/
|
||||
|
||||
#if (LL_USART_ENABLE == DDL_ON)
|
||||
|
||||
/*******************************************************************************
|
||||
* Global type definitions ('typedef')
|
||||
******************************************************************************/
|
||||
/**
|
||||
* @defgroup USART_Global_Types USART Global Types
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief clock synchronization mode initialization structure definition
|
||||
* @note The parameter(u32ClockDiv/u32CKOutput/u32Baudrate) is valid when clock source is the internal clock.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t u32ClockSrc; /*!< Clock Source.
|
||||
This parameter can be a value of @ref USART_Clock_Source */
|
||||
uint32_t u32ClockDiv; /*!< Clock division.
|
||||
This parameter can be a value of @ref USART_Clock_Division. */
|
||||
uint32_t u32Baudrate; /*!< USART baudrate.
|
||||
This parameter is valid when clock source is the internal clock. */
|
||||
uint32_t u32FirstBit; /*!< Significant bit.
|
||||
This parameter can be a value of @ref USART_First_Bit */
|
||||
uint32_t u32HWFlowControl; /*!< Hardware flow control.
|
||||
This parameter can be a value of @ref USART_Hardware_Flow_Control */
|
||||
} stc_usart_clocksync_init_t;
|
||||
|
||||
/**
|
||||
* @brief UART multiple-processor initialization structure definition
|
||||
* @note The parameter(u32ClockDiv/u32CKOutput/u32Baudrate) is valid when clock source is the internal clock.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t u32ClockSrc; /*!< Clock Source.
|
||||
This parameter can be a value of @ref USART_Clock_Source */
|
||||
uint32_t u32ClockDiv; /*!< Clock division.
|
||||
This parameter can be a value of @ref USART_Clock_Division. */
|
||||
uint32_t u32CKOutput; /*!< USART_CK output selection.
|
||||
This parameter can be a value of @ref USART_CK_Output_Selection. */
|
||||
uint32_t u32Baudrate; /*!< USART baudrate.
|
||||
This parameter is valid when clock source is the internal clock. */
|
||||
uint32_t u32DataWidth; /*!< Data width.
|
||||
This parameter can be a value of @ref USART_Data_Width_Bit */
|
||||
uint32_t u32StopBit; /*!< Stop Bits.
|
||||
This parameter can be a value of @ref USART_Stop_Bit */
|
||||
uint32_t u32OverSampleBit; /*!< Oversampling Bits.
|
||||
This parameter can be a value of @ref USART_Over_Sample_Bit */
|
||||
uint32_t u32FirstBit; /*!< Significant bit.
|
||||
This parameter can be a value of @ref USART_First_Bit */
|
||||
uint32_t u32StartBitPolarity; /*!< Start Bit Detect Polarity.
|
||||
This parameter can be a value of @ref USART_Start_Bit_Polarity */
|
||||
uint32_t u32HWFlowControl; /*!< Hardware flow control.
|
||||
This parameter can be a value of @ref USART_Hardware_Flow_Control */
|
||||
} stc_usart_multiprocessor_init_t;
|
||||
|
||||
/**
|
||||
* @brief UART mode initialization structure definition
|
||||
* @note The parameter(u32ClockDiv/u32CKOutput/u32Baudrate) is valid when clock source is the internal clock.
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t u32ClockSrc; /*!< Clock Source.
|
||||
This parameter can be a value of @ref USART_Clock_Source */
|
||||
uint32_t u32ClockDiv; /*!< Clock division.
|
||||
This parameter can be a value of @ref USART_Clock_Division. */
|
||||
uint32_t u32CKOutput; /*!< USART_CK output selection.
|
||||
This parameter can be a value of @ref USART_CK_Output_Selection. */
|
||||
uint32_t u32Baudrate; /*!< USART baudrate.
|
||||
This parameter is valid when clock source is the internal clock. */
|
||||
uint32_t u32DataWidth; /*!< Data width.
|
||||
This parameter can be a value of @ref USART_Data_Width_Bit */
|
||||
uint32_t u32StopBit; /*!< Stop Bits.
|
||||
This parameter can be a value of @ref USART_Stop_Bit */
|
||||
uint32_t u32Parity; /*!< Parity format.
|
||||
This parameter can be a value of @ref USART_Parity_Control */
|
||||
uint32_t u32OverSampleBit; /*!< Oversampling Bits.
|
||||
This parameter can be a value of @ref USART_Over_Sample_Bit */
|
||||
uint32_t u32FirstBit; /*!< Significant bit.
|
||||
This parameter can be a value of @ref USART_First_Bit */
|
||||
uint32_t u32StartBitPolarity; /*!< Start Bit Detect Polarity.
|
||||
This parameter can be a value of @ref USART_Start_Bit_Polarity */
|
||||
uint32_t u32HWFlowControl; /*!< Hardware flow control.
|
||||
This parameter can be a value of @ref USART_Hardware_Flow_Control */
|
||||
} stc_usart_uart_init_t;
|
||||
|
||||
/**
|
||||
* @brief Smartcard mode initialization structure definition
|
||||
*/
|
||||
typedef struct {
|
||||
uint32_t u32ClockDiv; /*!< Clock division. This parameter can be a value of @ref USART_Clock_Division.
|
||||
@note This parameter is valid when clock source is the internal clock. */
|
||||
uint32_t u32CKOutput; /*!< USART_CK output selection. This parameter can be a value of @ref USART_CK_Output_Selection.
|
||||
@note This parameter is valid when clock source is the internal clock. */
|
||||
uint32_t u32Baudrate; /*!< USART baudrate.
|
||||
This parameter is calculated according with smartcard default ETU and clock. */
|
||||
uint32_t u32FirstBit; /*!< Significant bit.
|
||||
This parameter can be a value of @ref USART_First_Bit */
|
||||
} stc_usart_smartcard_init_t;
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Global pre-processor symbols/macros ('#define')
|
||||
******************************************************************************/
|
||||
/**
|
||||
* @defgroup USART_Global_Macros USART Global Macros
|
||||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Flag USART Flag
|
||||
* @{
|
||||
*/
|
||||
#define USART_FLAG_RX_FULL (USART_SR_RXNE) /*!< Receive data register not empty flag */
|
||||
#define USART_FLAG_OVERRUN (USART_SR_ORE) /*!< Overrun error flag */
|
||||
#define USART_FLAG_TX_CPLT (USART_SR_TC) /*!< Transmission complete flag */
|
||||
#define USART_FLAG_TX_EMPTY (USART_SR_TXE) /*!< Transmit data register empty flag */
|
||||
#define USART_FLAG_FRAME_ERR (USART_SR_FE) /*!< Framing error flag */
|
||||
#define USART_FLAG_PARITY_ERR (USART_SR_PE) /*!< Parity error flag */
|
||||
#define USART_FLAG_MX_PROCESSOR (USART_SR_MPB) /*!< Receive processor ID flag */
|
||||
#define USART_FLAG_RX_TIMEOUT (USART_SR_RTOF) /*!< Receive timeout flag */
|
||||
|
||||
#define USART_FLAG_ALL (USART_FLAG_RX_FULL | USART_FLAG_FRAME_ERR | USART_FLAG_TX_EMPTY | \
|
||||
USART_FLAG_OVERRUN | USART_FLAG_PARITY_ERR | USART_FLAG_RX_TIMEOUT | \
|
||||
USART_FLAG_TX_CPLT | USART_FLAG_MX_PROCESSOR )
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Transmission_Type USART Transmission Type
|
||||
* @{
|
||||
*/
|
||||
#define USART_TRANS_DATA (0UL)
|
||||
#define USART_TRANS_ID (USART_TDR_MPID)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Function USART Function
|
||||
* @{
|
||||
*/
|
||||
#define USART_TX (USART_CR1_TE) /*!< USART TX function */
|
||||
#define USART_RX (USART_CR1_RE) /*!< USART RX function */
|
||||
#define USART_INT_RX (USART_CR1_RIE) /*!< USART receive data register not empty && receive error interrupt */
|
||||
#define USART_INT_TX_CPLT (USART_CR1_TCIE) /*!< USART transmission complete interrupt */
|
||||
#define USART_INT_TX_EMPTY (USART_CR1_TXEIE) /*!< USART transmit data register empty interrupt */
|
||||
#define USART_RX_TIMEOUT (USART_CR1_RTOE) /*!< USART RX timeout function */
|
||||
#define USART_INT_RX_TIMEOUT (USART_CR1_RTOIE) /*!< USART RX timeout interrupt */
|
||||
|
||||
#define USART_FUNC_ALL (USART_TX | USART_RX | USART_INT_RX | USART_INT_TX_CPLT | USART_RX_TIMEOUT | \
|
||||
USART_INT_RX_TIMEOUT | USART_INT_TX_EMPTY)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Parity_Control USART Parity Control
|
||||
* @{
|
||||
*/
|
||||
#define USART_PARITY_NONE (0UL) /*!< Parity control disabled */
|
||||
#define USART_PARITY_EVEN (USART_CR1_PCE) /*!< Parity control enabled and Even Parity is selected */
|
||||
#define USART_PARITY_ODD (USART_CR1_PCE | \
|
||||
USART_CR1_PS) /*!< Parity control enabled and Odd Parity is selected */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Data_Width_Bit USART Data Width Bit
|
||||
* @{
|
||||
*/
|
||||
#define USART_DATA_WIDTH_8BIT (0UL) /*!< 8 bits */
|
||||
#define USART_DATA_WIDTH_9BIT (USART_CR1_M) /*!< 9 bits */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Over_Sample_Bit USART Over Sample Bit
|
||||
* @{
|
||||
*/
|
||||
#define USART_OVER_SAMPLE_16BIT (0UL) /*!< Oversampling by 16 bits */
|
||||
#define USART_OVER_SAMPLE_8BIT (USART_CR1_OVER8) /*!< Oversampling by 8 bits */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_First_Bit USART First Bit
|
||||
* @{
|
||||
*/
|
||||
#define USART_FIRST_BIT_LSB (0UL) /*!< LSB(Least Significant Bit) */
|
||||
#define USART_FIRST_BIT_MSB (USART_CR1_ML) /*!< MSB(Most Significant Bit) */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Start_Bit_Polarity USART Start Bit Polarity
|
||||
* @{
|
||||
*/
|
||||
#define USART_START_BIT_LOW (0UL) /*!< Detect RX pin low level */
|
||||
#define USART_START_BIT_FALLING (USART_CR1_SBS) /*!< Detect RX pin falling edge */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Clock_Source USART Clock Source
|
||||
* @{
|
||||
*/
|
||||
#define USART_CLK_SRC_INTERNCLK (0UL) /*!< Select internal clock source and don't output clock */
|
||||
#define USART_CLK_SRC_EXTCLK (USART_CR2_CLKC_1) /*!< Select external clock source. */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_CK_Output_Selection USART_CK Output Selection
|
||||
* @{
|
||||
*/
|
||||
#define USART_CK_OUTPUT_DISABLE (0UL) /*!< Disable USART_CK output */
|
||||
#define USART_CK_OUTPUT_ENABLE (USART_CR2_CLKC_0) /*!< Enable USART_CK output. */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Stop_Bit USART Stop Bit
|
||||
* @{
|
||||
*/
|
||||
#define USART_STOPBIT_1BIT (0UL) /*!< 1 stop bit */
|
||||
#define USART_STOPBIT_2BIT (USART_CR2_STOP) /*!< 2 stop bit */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Hardware_Flow_Control USART Hardware Flow Control
|
||||
* @{
|
||||
*/
|
||||
#define USART_HW_FLOWCTRL_CTS (USART_CR3_CTSE) /*!< USART hardware flow control CTS mode */
|
||||
#define USART_HW_FLOWCTRL_RTS (USART_CR3_CTSE >> 1U) /*!< USART hardware flow control RTS mode */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Clock_Division USART Clock Division
|
||||
* @{
|
||||
*/
|
||||
#define USART_CLK_DIV1 (0UL) /*!< CLK */
|
||||
#define USART_CLK_DIV4 (1UL) /*!< CLK/4 */
|
||||
#define USART_CLK_DIV16 (2UL) /*!< CLK/16 */
|
||||
#define USART_CLK_DIV64 (3UL) /*!< CLK/64 */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Max_Timeout USART Max Timeout
|
||||
* @{
|
||||
*/
|
||||
#define USART_MAX_TIMEOUT (0xFFFFFFFFUL)
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @defgroup USART_Smartcard_ETU_Clock USART Smartcard ETU Clock
|
||||
* @{
|
||||
*/
|
||||
#define USART_SC_ETU_CLK32 (0UL << USART_CR3_BCN_POS) /*!< 1 etu = 32/f */
|
||||
#define USART_SC_ETU_CLK64 (1UL << USART_CR3_BCN_POS) /*!< 1 etu = 64/f */
|
||||
#define USART_SC_ETU_CLK128 (3UL << USART_CR3_BCN_POS) /*!< 1 etu = 128/f */
|
||||
#define USART_SC_ETU_CLK256 (5UL << USART_CR3_BCN_POS) /*!< 1 etu = 256/f */
|
||||
#define USART_SC_ETU_CLK372 (6UL << USART_CR3_BCN_POS) /*!< 1 etu = 372/f */
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/*******************************************************************************
|
||||
* Global variable definitions ('extern')
|
||||
******************************************************************************/
|
||||
|
||||
/*******************************************************************************
|
||||
Global function prototypes (definition in C source)
|
||||
******************************************************************************/
|
||||
/**
|
||||
* @addtogroup USART_Global_Functions
|
||||
* @{
|
||||
*/
|
||||
int32_t USART_ClockSync_StructInit(stc_usart_clocksync_init_t *pstcClockSyncInit);
|
||||
int32_t USART_ClockSync_Init(CM_USART_TypeDef *USARTx,
|
||||
const stc_usart_clocksync_init_t *pstcClockSyncInit, float32_t *pf32Error);
|
||||
int32_t USART_MultiProcessor_StructInit(stc_usart_multiprocessor_init_t *pstcMultiProcessorInit);
|
||||
int32_t USART_MultiProcessor_Init(CM_USART_TypeDef *USARTx,
|
||||
const stc_usart_multiprocessor_init_t *pstcMultiProcessorInit, float32_t *pf32Error);
|
||||
int32_t USART_UART_StructInit(stc_usart_uart_init_t *pstcUartInit);
|
||||
int32_t USART_UART_Init(CM_USART_TypeDef *USARTx, const stc_usart_uart_init_t *pstcUartInit, float32_t *pf32Error);
|
||||
|
||||
int32_t USART_SmartCard_StructInit(stc_usart_smartcard_init_t *pstcSmartCardInit);
|
||||
int32_t USART_SmartCard_Init(CM_USART_TypeDef *USARTx,
|
||||
const stc_usart_smartcard_init_t *pstcSmartCardInit, float32_t *pf32Error);
|
||||
|
||||
int32_t USART_DeInit(CM_USART_TypeDef *USARTx);
|
||||
void USART_FuncCmd(CM_USART_TypeDef *USARTx, uint32_t u32Func, en_functional_state_t enNewState);
|
||||
en_flag_status_t USART_GetStatus(const CM_USART_TypeDef *USARTx, uint32_t u32Flag);
|
||||
void USART_ClearStatus(CM_USART_TypeDef *USARTx, uint32_t u32Flag);
|
||||
void USART_SetParity(CM_USART_TypeDef *USARTx, uint32_t u32Parity);
|
||||
void USART_SetFirstBit(CM_USART_TypeDef *USARTx, uint32_t u32FirstBit);
|
||||
void USART_SetStopBit(CM_USART_TypeDef *USARTx, uint32_t u32StopBit);
|
||||
void USART_SetDataWidth(CM_USART_TypeDef *USARTx, uint32_t u32DataWidth);
|
||||
void USART_SetOverSampleBit(CM_USART_TypeDef *USARTx, uint32_t u32OverSampleBit);
|
||||
void USART_SetStartBitPolarity(CM_USART_TypeDef *USARTx, uint32_t u32Polarity);
|
||||
void USART_SetTransType(CM_USART_TypeDef *USARTx, uint16_t u16Type);
|
||||
void USART_SetClockDiv(CM_USART_TypeDef *USARTx, uint32_t u32ClockDiv);
|
||||
uint32_t USART_GetClockDiv(const CM_USART_TypeDef *USARTx);
|
||||
void USART_SetClockSrc(CM_USART_TypeDef *USARTx, uint32_t u32ClockSrc);
|
||||
uint32_t USART_GetClockSrc(const CM_USART_TypeDef *USARTx);
|
||||
void USART_FilterCmd(CM_USART_TypeDef *USARTx, en_functional_state_t enNewState);
|
||||
void USART_SilenceCmd(CM_USART_TypeDef *USARTx, en_functional_state_t enNewState);
|
||||
void USART_SetHWFlowControl(CM_USART_TypeDef *USARTx, uint32_t u32HWFlowControl);
|
||||
uint16_t USART_ReadData(const CM_USART_TypeDef *USARTx);
|
||||
void USART_WriteData(CM_USART_TypeDef *USARTx, uint16_t u16Data);
|
||||
void USART_WriteID(CM_USART_TypeDef *USARTx, uint16_t u16ID);
|
||||
|
||||
int32_t USART_SetBaudrate(CM_USART_TypeDef *USARTx, uint32_t u32Baudrate, float32_t *pf32Error);
|
||||
|
||||
void USART_SmartCard_SetEtuClock(CM_USART_TypeDef *USARTx, uint32_t u32EtuClock);
|
||||
|
||||
int32_t USART_UART_Trans(CM_USART_TypeDef *USARTx, const void *pvBuf, uint32_t u32Len, uint32_t u32Timeout);
|
||||
int32_t USART_UART_Receive(const CM_USART_TypeDef *USARTx, void *pvBuf, uint32_t u32Len, uint32_t u32Timeout);
|
||||
int32_t USART_ClockSync_Trans(CM_USART_TypeDef *USARTx, const uint8_t au8Buf[], uint32_t u32Len, uint32_t u32Timeout);
|
||||
int32_t USART_ClockSync_Receive(CM_USART_TypeDef *USARTx, uint8_t au8Buf[], uint32_t u32Len, uint32_t u32Timeout);
|
||||
int32_t USART_ClockSync_TransReceive(CM_USART_TypeDef *USARTx, const uint8_t au8TxBuf[], uint8_t au8RxBuf[],
|
||||
uint32_t u32Len, uint32_t u32Timeout);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#endif /* LL_USART_ENABLE */
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* __HC32_LL_USART_H__ */
|
||||
|
||||
/*******************************************************************************
|
||||
* EOF (not truncated)
|
||||
******************************************************************************/
|
||||
Reference in New Issue
Block a user