lib_uart.h 5.4 KB
Newer Older
W
wangyq2018 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
/***************************************************************
 *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**********************/