305 lines
8.8 KiB
C
305 lines
8.8 KiB
C
|
/*
|
||
|
File Name : yc_uart.h
|
||
|
Author : Yichip
|
||
|
Version : V1.0
|
||
|
Date : 2019/12/4
|
||
|
Description : UART encapsulation.
|
||
|
*/
|
||
|
#ifndef __YC_UART_H__
|
||
|
#define __YC_UART_H__
|
||
|
|
||
|
#include "yc3121.h"
|
||
|
|
||
|
/** @def time of UART receive data time out intterrupt. real time = regvalue*48
|
||
|
* @{
|
||
|
*/
|
||
|
#define TIME_IT_TIMEOUT (uint16_t)0x01
|
||
|
|
||
|
/** @defgroup USART_Mode
|
||
|
* @{
|
||
|
*/
|
||
|
#define Mode_Single_Line (1<<6)
|
||
|
#define Mode_duplex (0<<6)
|
||
|
#define IS_MODE(MODE) (((MODE) == Mode_Single_Line) ||\
|
||
|
((MODE) == Mode_duplex))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @
|
||
|
* @defgroup USART_DataBits
|
||
|
*/
|
||
|
#define Databits_8b (0<<2)
|
||
|
#define Databits_9b (1<<2)
|
||
|
|
||
|
#define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == Databits_8b) || \
|
||
|
((LENGTH) == Databits_9b))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USART_Stop_Bits
|
||
|
* @{
|
||
|
*/
|
||
|
#define StopBits_1 (0<<3)
|
||
|
#define StopBits_2 (1<<3)
|
||
|
#define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == StopBits_1) || \
|
||
|
((STOPBITS) == StopBits_2) )
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USART_Hardware_Flow_Control
|
||
|
* @{
|
||
|
*/
|
||
|
#define FlowCtrl_None (0<<4)
|
||
|
#define FlowCtrl_Enable (1<<4)
|
||
|
|
||
|
#define IS_FlowCtrl(CONTROL) (((CONTROL) == FlowCtrl_None) || \
|
||
|
((CONTROL) == FlowCtrl_Enable))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup UART_Interrupt_Type_definition
|
||
|
* @{
|
||
|
*/
|
||
|
#define UART_IT_TX 0x01
|
||
|
#define UART_IT_RX 0x02
|
||
|
#define IS_UART_IT(x) (x == UART_IT_TX)||(x == UART_IT_RX)
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USART_Parity
|
||
|
* @{
|
||
|
*/
|
||
|
#define Parity_None (0<<1)
|
||
|
#define Parity_Even (0<<1)
|
||
|
#define Parity_Odd (1<<1)
|
||
|
#define IS_PARITY(PARITY) (((PARITY) == Parity_Even) ||\
|
||
|
((PARITY) == Parity_None) ||\
|
||
|
((PARITY) == Parity_Odd))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/** @defgroup USART_BaudRate
|
||
|
* @{
|
||
|
*/
|
||
|
#define IS_BAUDRATE(BAUDRATE) (((BAUDRATE) > 0x5B8) && ((BAUDRATE) < 0x0044AA21))
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
uint8_t Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
|
||
|
This parameter can be a value of @ref USART_Mode */
|
||
|
|
||
|
uint32_t BaudRate; /*!< This member configures the USART communication baud rate. */
|
||
|
|
||
|
uint8_t DataBits; /*!< Specifies the number of data bits transmitted or received in a frame.
|
||
|
This parameter can be a value of @ref USART_DataBits */
|
||
|
|
||
|
uint8_t StopBits; /*!< Specifies the number of stop bits transmitted.
|
||
|
This parameter can be a value of @ref USART_Stop_Bits */
|
||
|
|
||
|
uint8_t Parity; /*!< Specifies the parity mode.
|
||
|
This parameter can be a value of @ref USART_Parity
|
||
|
@note When parity is enabled, the computed parity is inserted
|
||
|
at the MSB position of the transmitted data (9th bit when
|
||
|
the word length is set to 9 data bits; 8th bit when the
|
||
|
word length is set to 8 data bits). */
|
||
|
|
||
|
uint8_t FlowCtrl; /*!< Specifies wether the hardware flow control mode is enabled or disabled.
|
||
|
This parameter can be a value of @ref USART_Hardware_Flow_Control */
|
||
|
|
||
|
int RxBufLen; /*!< Specifies uart DMA Rx buff length */
|
||
|
|
||
|
} UART_InitTypeDef;
|
||
|
|
||
|
/** @defgroup UART_TypeDef
|
||
|
* @{
|
||
|
*/
|
||
|
typedef enum
|
||
|
{
|
||
|
UART0 = 0,
|
||
|
UART1,
|
||
|
} UART_TypeDef;
|
||
|
|
||
|
#define IS_UART(UARTx) (UARTx == UART0 ||UARTx == UART1)
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief ENABLE or DISABLE UARTx auto flow control
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param NewState:ENABLE or DISABLE auto flow control
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_AutoFlowCtrlCmd(UART_TypeDef UARTx, FunctionalState NewState);
|
||
|
|
||
|
/**
|
||
|
* @brief Clear IT
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_ClearIT(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief DeInit UART
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_DeInit(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Transmits datas via UART DMA .
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param buf: pointer to a buf that contains the data you want transmit.
|
||
|
* @param len: the buf length
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_DMASendBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
|
||
|
|
||
|
/**
|
||
|
* @brief Get IT Identity
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* @retval IT Identity
|
||
|
*/
|
||
|
uint8_t UART_GetITIdentity(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Initializes the USARTx peripheral according to the specified
|
||
|
* parameters in the USART_InitStruct .
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param USART_InitStruct: pointer to a USART_InitTypeDef structure
|
||
|
* that contains the configuration information for the specified USART
|
||
|
* peripheral.
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_Init(UART_TypeDef UARTx, UART_InitTypeDef *UART_InitStruct);
|
||
|
|
||
|
/**
|
||
|
* @brief Judge Rx fifo full is or not.
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* @retval TRUE:Rx fifo is full.
|
||
|
* FALSE:Rx fifo is not full
|
||
|
*/
|
||
|
Boolean UART_IsRXFIFOFull(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Judge Rx fifo empty is or not.
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* @retval TRUE:Rx fifo is not empty.
|
||
|
* FALSE:Rx fifo is empty;
|
||
|
*/
|
||
|
Boolean UART_IsRXFIFONotEmpty(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Judge UART is Busy or not
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* @retval None
|
||
|
*/
|
||
|
Boolean UART_IsUARTBusy(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Config Interrupt trigger mode
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param UART_IT: Interrupt trigger mode ,this param will the following values,
|
||
|
* UART_IT_TX:interrupt trigger after send data completed.
|
||
|
* UART_IT_RX:interrupt trigger when received data.
|
||
|
* @param NewState:
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_ITConfig(UART_TypeDef UARTx, uint32_t UART_IT, FunctionalState NewState);
|
||
|
|
||
|
/**
|
||
|
* @brief Receive single data through the USARTx peripheral.
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @retval None
|
||
|
*/
|
||
|
uint8_t UART_ReceiveData(UART_TypeDef UARTx);
|
||
|
|
||
|
/**
|
||
|
* @brief Receives datas through the UART DMA.
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param buf: pointer to a buf that contains the data you want receive.
|
||
|
* @param len: the buf length
|
||
|
* @retval None
|
||
|
*/
|
||
|
int UART_RecvBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
|
||
|
|
||
|
/**
|
||
|
* @brief T ransmits datas via UART DMA,the function will return after datas is sent.
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param buf: pointer to a buf that contains the data you want transmit.
|
||
|
* @param len: the buf length
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_SendBuf(UART_TypeDef UARTx, uint8_t *buf, int len);
|
||
|
|
||
|
/**
|
||
|
* @brief UART Send One Data
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_SendData(UART_TypeDef UARTx, uint8_t Data);
|
||
|
|
||
|
/**
|
||
|
* @brief UART_SetITTimeout
|
||
|
* @param USARTx: Select the USART or the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* timeout: 0x0000~0xffff
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_SetITTimeout(UART_TypeDef UARTx, uint16_t timeout);
|
||
|
|
||
|
/**
|
||
|
* @brief Set the number of uart receive data intterupt trigger
|
||
|
* @param UARTx: Select the UART peripheral.
|
||
|
* This parameter can be one of the following values:
|
||
|
* UART0, UART1.
|
||
|
* @param Bcnt: if the number of receive datas greater than Bcnt,interrupt trigger
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_SetRxITNum(UART_TypeDef UARTx, uint8_t Bcnt);
|
||
|
|
||
|
/**
|
||
|
* @brief Fills each USART_InitStruct member with its default value.
|
||
|
* @param USART_InitStruct: pointer to a USART_InitTypeDef structure
|
||
|
* which will be initialized.
|
||
|
* @retval None
|
||
|
*/
|
||
|
void UART_StructInit(UART_InitTypeDef *UART_InitStruct);
|
||
|
|
||
|
/**
|
||
|
* @brief UART_ReceiveDataLen
|
||
|
* @param UARTx: UART0 or UART1
|
||
|
* @retval Data len
|
||
|
*/
|
||
|
uint16_t UART_ReceiveDataLen(UART_TypeDef UARTx);
|
||
|
|
||
|
#endif /*__YC_UART_H__*/
|