172 lines
5.4 KiB
C
172 lines
5.4 KiB
C
/***************************************************************
|
||
*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**********************/
|