rt-thread-official/bsp/essemi/es8p508x/libraries/Library/Include/lib_uart.h

172 lines
5.4 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.

/***************************************************************
*Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd.
*文件名: lib_uart.h
*作 者: Liut
*版 本: V1.00
*日 期: 2017/07/14
*描 述: UART模块库函数头文件
*备 注: 适用于 ES8P508x芯片
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
***************************************************************/
#ifndef __LIBUART_H__
#define __LIBUART_H__
#include "ES8P508x.h"
#include "type.h"
#include "system_ES8P508x.h"
/* 发送帧停止位选择 */
typedef enum
{
UART_StopBits_1 = 0x0 , //发送帧停止位1位
UART_StopBits_2 = 0x1 , //发送帧停止位2位
}UART_TYPE_TXFS;
/* 数据格式 */
typedef enum
{
UART_DataMode_7 = 0x0 , //数据格式:7位数据
UART_DataMode_8 = 0x1 , //数据格式:8位数据
UART_DataMode_9 = 0x2 , //数据格式:9位数据
UART_DataMode_7Odd = 0x4 , //数据格式:7位数据+奇校验
UART_DataMode_7Even = 0x5 , //数据格式:7位数据+偶校验
UART_DataMode_8Odd = 0x6 , //数据格式:8位数据+奇校验
UART_DataMode_8Even = 0x7 , //数据格式:8位数据+偶校验
}UART_TYPE_DATAMOD;
/* 端口极性 */
typedef enum
{
UART_Polar_Normal = 0x0 , //发送端口极性:正常
UART_Polar_Opposite = 0x1 , //发送端口极性:反向
}UART_TYPE_RTXP;
/* 波特率发生器时钟选择 */
typedef enum
{
UART_Clock_1 = 0x1 , //波特率发生器时钟:PCLK
UART_Clock_2 = 0x2 , //波特率发生器时钟:PCLK/2
UART_Clock_4 = 0x3 , //波特率发生器时钟:PCLK/4
UART_Clock_8 = 0x4 , //波特率发生器时钟:PCLK/8
}UART_TYPE_BCS;
/* UART初始化配置结构体定义 */
typedef struct
{
UART_TYPE_TXFS UART_StopBits; //发送帧停止位选择
UART_TYPE_DATAMOD UART_TxMode; //发送数据帧格式
UART_TYPE_RTXP UART_TxPolar; //发送端口极性
UART_TYPE_DATAMOD UART_RxMode; //接收数据帧格式
UART_TYPE_RTXP UART_RxPolar; //接收端口极性
uint32_t UART_BaudRate; //传输波特率
UART_TYPE_BCS UART_ClockSet; //波特率发生器时钟选择
}UART_InitStruType;
/* 中断选择 */
typedef enum
{
UART_IT_TB = 0x0001 ,
UART_IT_RB = 0x0002 ,
UART_IT_RO = 0x0004 ,
UART_IT_FE = 0x0008 ,
UART_IT_PE = 0x0010 ,
UART_IT_TBWE = 0x0020 ,
UART_IT_TXIDLE = 0x1000 ,
UART_IT_RXIDLE = 0x2000 ,
}UART_TYPE_IT;
/* 标志位 */
typedef enum
{
UART_FLAG_TB = 0x0001 ,
UART_FLAG_RB = 0x0002 ,
UART_FLAG_RO = 0x0004 ,
UART_FLAG_FE = 0x0008 ,
UART_FLAG_PE = 0x0010 ,
UART_FLAG_TBWE = 0x0020 ,
UART_FLAG_TXIDLE = 0x1000 ,
UART_FLAG_RXIDLE = 0x2000 ,
}UART_TYPE_FLAG;
/* 清除中断标志位 */
typedef enum
{
UART_Clr_RO = 0x0004 ,
UART_Clr_FE = 0x0008 ,
UART_Clr_PE = 0x0010 ,
UART_Clr_TBWE = 0x0020 ,
}UART_CLR_IF;
/* 发送、接收中断模式 */
typedef enum
{
UART_TRBIM_Byte = 0x0 , //中断:字节
UART_TRBIM_HalfWord = 0x1 , //中断:半字
UART_TRBIM_Word = 0x2 , //中断:字
}UART_TYPE_TRBIM;
/*************UART模块宏定义************/
/* 发送使能控制 */
#define UART0_TxEnable() (UART0->CON.TXEN = 1)
#define UART1_TxEnable() (UART1->CON.TXEN = 1)
#define UART2_TxEnable() (UART2->CON.TXEN = 1)
#define UART3_TxEnable() (UART3->CON.TXEN = 1)
#define UART4_TxEnable() (UART4->CON.TXEN = 1)
#define UART5_TxEnable() (UART5->CON.TXEN = 1)
#define UART0_TxDisable() (UART0->CON.TXEN = 0)
#define UART1_TxDisable() (UART1->CON.TXEN = 0)
#define UART2_TxDisable() (UART2->CON.TXEN = 0)
#define UART3_TxDisable() (UART3->CON.TXEN = 0)
#define UART4_TxDisable() (UART4->CON.TXEN = 0)
#define UART5_TxDisable() (UART5->CON.TXEN = 0)
/* 接收使能控制 */
#define UART0_RxEnable() (UART0->CON.RXEN = 1)
#define UART1_RxEnable() (UART1->CON.RXEN = 1)
#define UART2_RxEnable() (UART2->CON.RXEN = 1)
#define UART3_RxEnable() (UART3->CON.RXEN = 1)
#define UART4_RxEnable() (UART4->CON.RXEN = 1)
#define UART5_RxEnable() (UART5->CON.RXEN = 1)
#define UART0_RxDisable() (UART0->CON.RXEN = 0)
#define UART1_RxDisable() (UART1->CON.RXEN = 0)
#define UART2_RxDisable() (UART2->CON.RXEN = 0)
#define UART3_RxDisable() (UART3->CON.RXEN = 0)
#define UART4_RxDisable() (UART4->CON.RXEN = 0)
#define UART5_RxDisable() (UART5->CON.RXEN = 0)
/* 发送器复位 */
#define UART0_TxRst() (UART0->CON.TRST = 1)
#define UART1_TxRst() (UART1->CON.TRST = 1)
#define UART2_TxRst() (UART2->CON.TRST = 1)
#define UART3_TxRst() (UART3->CON.TRST = 1)
#define UART4_TxRst() (UART4->CON.TRST = 1)
#define UART5_TxRst() (UART5->CON.TRST = 1)
/* 接收器复位 */
#define UART0_RxRst() (UART0->CON.RRST = 1)
#define UART1_RxRst() (UART1->CON.RRST = 1)
#define UART2_RxRst() (UART2->CON.RRST = 1)
#define UART3_RxRst() (UART3->CON.RRST = 1)
#define UART4_RxRst() (UART4->CON.RRST = 1)
#define UART5_RxRst() (UART5->CON.RRST = 1)
/************UART模块函数声明***********/
void UART_Init(UART_TypeDef* UARTx,UART_InitStruType* UART_InitStruct);
void UART_ITConfig(UART_TypeDef* UARTx,UART_TYPE_IT UART_IT,TYPE_FUNCEN NewState);
void UART_TBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type);
void UART_RBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type);
void UART_SendByte(UART_TypeDef* UARTx,uint8_t Temp08);
void UART_SendHalfWord(UART_TypeDef* UARTx,uint16_t Temp16);
void UART_SendWord(UART_TypeDef* UARTx,uint32_t Temp32);
uint8_t UART_RecByte(UART_TypeDef* UARTx);
uint16_t UART_RecHalfWord(UART_TypeDef* UARTx);
uint32_t UART_RecWord(UART_TypeDef* UARTx);
FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx,UART_TYPE_FLAG UART_Flag);
ITStatus UART_GetITStatus(UART_TypeDef* UARTx,UART_TYPE_IT UART_Flag);
void UART_ClearITPendingBit(UART_TypeDef* UARTx,UART_CLR_IF UART_Flag);
#endif
/*************************END OF FILE**********************/