You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

214 lines
9.2 KiB

/*********************************************************
*Copyright (C), 2015, Shanghai Eastsoft Microelectronics Co., Ltd.
*文件名: lib_uart.h
*作 者: AE Team
*版 本: V1.01
*日 期: 2021/06/09
*描 述: UART模块库函数头文件
*备 注:
本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
**********************************************************/
#ifndef __LIBUART_H__
#define __LIBUART_H__
#include "ES8P5066.h"
#include "type.h"
/* 停止位 */
typedef enum
{
UART_StopBits_1 = 0x0, /* 1位停止位 */
UART_StopBits_2 = 0x1, /* 2位停止位 */
} UART_TYPE_TXFS;
/* 数据格式 */
typedef enum
{
UART_DataMode_7 = 0x4, /* 7位数据 */
UART_DataMode_8 = 0x0, /* 8位数据 */
UART_DataMode_9 = 0x2, /* 9位数据 */
UART_DataMode_7Odd = 0xD, /* 7位数据+奇校验 */
UART_DataMode_7Even = 0xC, /* 7位数据+偶校验 */
UART_DataMode_7Add0 = 0xE, /* 7位数据+固定0 */
UART_DataMode_7Add1 = 0xF, /* 7位数据+固定1 */
UART_DataMode_8Odd = 0x9, /* 8位数据+奇校验 */
UART_DataMode_8Even = 0x8, /* 8位数据+偶校验 */
UART_DataMode_8Add0 = 0xA, /* 8位数据+固定0 */
UART_DataMode_8Add1 = 0xB, /* 8位数据+固定1 */
} 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_3 = 0x3, /* PCLK / 4 */
UART_Clock_4 = 0x4, /* PCLK / 8 */
} UART_TYPE_BCS;
/* 初始化结构体 */
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时钟选择 */
} UART_InitStruType;
/*自动波特率检测模式*/
typedef enum
{
UART_AUTO_BAUD_MODE1 = 0x00, /* 自动波特率检测模式1,接收数据流以二进制1开始 */
UART_AUTO_BAUD_MODE2 = 0x01, /* 自动波特率检测模式1,接收数据流以二进制10开始 */
UART_AUTO_BAUD_MODE3 = 0x02, /* 自动波特率检测模式1,接收数据流以二进制1111_1110开始 */
UART_AUTO_BAUD_MODE4 = 0x03, /* 自动波特率检测模式1,接收数据流以二进制1010_1010开始 */
} UART_AUTO_BAUD_MODE;
/*空闲检测模式*/
typedef enum
{
UART_AUTO_BAUD_FREE_MODE1 = 0x00, /* 将检测连续 10 个比特位空闲 */
UART_AUTO_BAUD_FREE_MODE2 = 0x01, /* 将检测连续 11 个比特位空闲 */
UART_AUTO_BAUD_FREE_MODE3 = 0x02, /* 将检测连续 12 个比特位空闲 */
UART_AUTO_BAUD_FREE_MODE4 = 0x03, /* 将检测连续 13 个比特位空闲 */
} UART_AUTO_BAUD_FREE_MODE;
/* Interrupt */
typedef enum
{
UART_IT_TB = (1 << 0), /* 发送缓冲器空中断 */
UART_IT_TC = (1 << 1), /* 发送完成中断 */
UART_IT_TBWE = (1 << 8), /* 发送缓冲错误中断 */
UART_IT_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
UART_IT_RB = (1 << 16), /* 接收缓冲器满中断 */
UART_IT_ID = (1 << 17), /* 接收空闲帧中断 */
UART_IT_RO = (1 << 24), /* 接收数据溢出中断 */
UART_IT_FE = (1 << 25), /* 接收帧错误中断 */
UART_IT_PE = (1 << 26), /* 接收校验错误中断 */
UART_IT_BDE = (1 << 27), /* 波特率检测错误中断 */
UART_IT_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
UART_IT_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
} UART_TYPE_IT;
/* Interrupt Flag */
typedef enum
{
UART_FLAG_TB = (1 << 0), /* 发送缓冲器空中断 */
UART_FLAG_TC = (1 << 1), /* 发送完成中断 */
UART_FLAG_TBWE = (1 << 8), /* 发送缓冲错误中断 */
UART_FLAG_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
UART_FLAG_RB = (1 << 16), /* 接收缓冲器满中断 */
UART_FLAG_ID = (1 << 17), /* 接收空闲帧中断 */
UART_FLAG_RO = (1 << 24), /* 接收数据溢出中断 */
UART_FLAG_FE = (1 << 25), /* 接收帧错误中断 */
UART_FLAG_PE = (1 << 26), /* 接收校验错误中断 */
UART_FLAG_BDE = (1 << 27), /* 波特率检测错误中断 */
UART_FLAG_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
UART_FLAG_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
} UART_TYPE_FLAG;
/* Interrupt Clear Flag */
typedef enum
{
UART_CLR_TC = (1 << 1), /* 发送完成中断 */
UART_CLR_TBWE = (1 << 8), /* 发送缓冲错误中断 */
UART_CLR_TBWO = (1 << 9), /* 发送缓冲溢出中断 */
UART_CLR_ID = (1 << 17), /* 接收空闲帧中断 */
UART_CLR_RO = (1 << 24), /* 接收数据溢出中断 */
UART_CLR_FE = (1 << 25), /* 接收帧错误中断 */
UART_CLR_PE = (1 << 26), /* 接收校验错误中断 */
UART_CLR_BDE = (1 << 27), /* 波特率检测错误中断 */
UART_CLR_RBRE = (1 << 28), /* 读接收缓冲错误中断 */
UART_CLR_RBRO = (1 << 29), /* 读接收缓冲溢出中断 */
} UART_CLR_IF;
/* Interrupt Mode */
typedef enum
{
UART_TBIM_Byte = 0x0, /* 字节中断 */
UART_TBIM_HalfWord = 0x1, /* 半字中断 */
UART_TBIM_Word = 0x2, /* 字中断 */
UART_TBIM_Full = 0x3, /* 全中断 */
} UART_TYPE_TRBIM;
/* Status */
typedef enum
{
UART_STA_TBOV = (1 << 4), /* 发送缓冲器溢出状态位 */
UART_STA_TXBUSY = (1 << 5), /* 发送状态位 */
UART_STA_RBOV = (1 << 12), /* 接收缓冲器溢出状态位 */
UART_STA_RXBUSY = (1 << 13), /* 接收状态位 */
UART_STA_FER0 = (1 << 16), /* 当前读取BYTE0帧格式错误位 */
UART_STA_PER0 = (1 << 17), /* 当前读取BYTE0校验错误位 */
UART_STA_FER1 = (1 << 18), /* 当前读取BYTE1帧格式错误位 */
UART_STA_PER1 = (1 << 19), /* 当前读取BYTE1校验错误位 */
UART_STA_FER2 = (1 << 20), /* 当前读取BYTE2帧格式错误位 */
UART_STA_PER2 = (1 << 21), /* 当前读取BYTE2校验错误位 */
UART_STA_FER3 = (1 << 22), /* 当前读取BYTE3帧格式错误位 */
UART_STA_PER3 = (1 << 23), /* 当前读取BYTE3校验错误位 */
} UART_TYPE_STA;
#define UART0_TxEnable() (UART0->CON0.TXEN = 1)
#define UART1_TxEnable() (UART1->CON0.TXEN = 1)
#define UART2_TxEnable() (UART2->CON0.TXEN = 1)
#define UART0_TxDisable() (UART0->CON0.TXEN = 0)
#define UART1_TxDisable() (UART1->CON0.TXEN = 0)
#define UART2_TxDisable() (UART2->CON0.TXEN = 0)
#define UART0_TxPause() (UART0->CON0.TXI = 1)
#define UART1_TxPause() (UART1->CON0.TXI = 1)
#define UART2_TxPause() (UART2->CON0.TXI = 1)
#define UART0_TxCont() (UART0->CON0.TXI = 0)
#define UART1_TxCont() (UART1->CON0.TXI = 0)
#define UART2_TxCont() (UART2->CON0.TXI = 0)
#define UART0_RxEnable() (UART0->CON0.RXEN = 1)
#define UART1_RxEnable() (UART1->CON0.RXEN = 1)
#define UART2_RxEnable() (UART2->CON0.RXEN = 1)
#define UART0_RxDisable() (UART0->CON0.RXEN = 0)
#define UART1_RxDisable() (UART1->CON0.RXEN = 0)
#define UART2_RxDisable() (UART2->CON0.RXEN = 0)
#define UART0_RxPause() (UART0->CON0.RXI = 1)
#define UART1_RxPause() (UART1->CON0.RXI = 1)
#define UART2_RxPause() (UART2->CON0.RXI = 1)
#define UART0_RxCont() (UART0->CON0.RXI = 0)
#define UART1_RxCont() (UART1->CON0.RXI = 0)
#define UART2_RxCont() (UART2->CON0.RXI = 0)
#define UART0_TxRst() (UART0->CON0.TRST = 1)
#define UART1_TxRst() (UART1->CON0.TRST = 1)
#define UART2_TxRst() (UART2->CON0.TRST = 1)
#define UART0_RxRst() (UART0->CON0.RRST = 1)
#define UART1_RxRst() (UART1->CON0.RRST = 1)
#define UART2_RxRst() (UART2->CON0.RRST = 1)
/* Function */
void UART_Init(UART_TypeDef *UARTx, UART_InitStruType *UART_InitStruct);
void UART_AutoBaudConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_MODE mode);
void UART_BaudFreeConfig(UART_TypeDef *UARTx, UART_AUTO_BAUD_FREE_MODE mode);
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 data08);
void UART_SendHalfWord(UART_TypeDef *UARTx, uint16_t data16);
void UART_SendWord(UART_TypeDef *UARTx, uint32_t data32);
uint8_t UART_AutoBaudResult(UART_TypeDef *UARTx);
uint8_t UART_RecByte(UART_TypeDef *UARTx);
uint16_t UART_RecHalfWord(UART_TypeDef *UARTx);
uint32_t UART_RecWord(UART_TypeDef *UARTx);
FlagStatus UART_GetStatus(UART_TypeDef *UARTx, UART_TYPE_STA UART_Flag);
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_TYPE_FLAG UART_Flag);
#endif