添加一些关于midi播放的项目
This commit is contained in:
@@ -0,0 +1,437 @@
|
||||
/*************************************************************************!
|
||||
* 技术讨论:QQ群 123763203
|
||||
* 官网 :www.navota.com
|
||||
*
|
||||
* @file uart.c
|
||||
* @brief uart通讯接口函数库
|
||||
* @author Navota
|
||||
* @date 2017-1-1
|
||||
*************************************************************************/
|
||||
#include "uart.h"
|
||||
|
||||
|
||||
/*!
|
||||
* @brief 存放回调入口
|
||||
*
|
||||
*/
|
||||
UART_CallbackType UART_Callback = NULL;
|
||||
|
||||
/******************************************************************************
|
||||
* 定义UART的接口函数
|
||||
*******************************************************************************/
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 初始化UART,关中断,无硬件流控制.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] pConfig 配置UART的结构体
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_Init(UART_Type *pUART, UART_ConfigType *pConfig)
|
||||
{
|
||||
uint16_t u16Sbr;
|
||||
uint8_t u8Temp;
|
||||
uint32_t u32SysClk = pConfig->u32SysClkHz;//定义系统时钟
|
||||
uint32_t u32Baud = pConfig->u32Baudrate;//定义波特率
|
||||
|
||||
/* 合法性检查 */
|
||||
ASSERT((pUART == UART0) || (pUART == UART1) || (pUART == UART2));
|
||||
|
||||
/* 设置时钟选通控制用来选择相应的 UART 口 */
|
||||
if (pUART == UART0)
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_UART0_MASK;//使能相应功能位, 选通对应 UART
|
||||
}
|
||||
#if defined(CPU_NV32)
|
||||
else if (pUART == UART1)
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_UART1_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
SIM->SCGC |= SIM_SCGC_UART2_MASK;
|
||||
}
|
||||
#endif
|
||||
/*确保在我们进行配置时, 禁止发送和接收*/
|
||||
pUART->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK );
|
||||
|
||||
/* 配置 UART 为 8 位模式, 无奇偶校验位 */
|
||||
pUART->C1 = 0;
|
||||
|
||||
/* 波特率计算 */
|
||||
u16Sbr = (((u32SysClk)>>4) + (u32Baud>>1))/u32Baud;
|
||||
|
||||
/*把当前数据存放在串口波特率寄存器中, 且SBR位清0,即波特率发生器被禁止*/
|
||||
u8Temp = pUART->BDH & ~(UART_BDH_SBR_MASK);
|
||||
|
||||
pUART->BDH = u8Temp | UART_BDH_SBR(u16Sbr >> 8);
|
||||
pUART->BDL = (uint8_t)(u16Sbr & UART_BDL_SBR_MASK);
|
||||
|
||||
/*使能 UART 接收和发送 */
|
||||
pUART->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK );
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 接收一个字符.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return 接收到的字符
|
||||
*
|
||||
*****************************************************************************/
|
||||
uint8_t UART_GetChar(UART_Type *pUART)
|
||||
{
|
||||
|
||||
/* 合法性检测 */
|
||||
ASSERT((pUART == UART0) || (pUART == UART1) || (pUART == UART2));
|
||||
|
||||
/* 等待直到一个字符被接收 */
|
||||
while (!(pUART->S1 & UART_S1_RDRF_MASK));
|
||||
|
||||
/* 返回接收到的8位数据 */
|
||||
return pUART->D;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 发送一个字符.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] u8Char 要发送的字符
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_PutChar(UART_Type *pUART, uint8_t u8Char)
|
||||
{
|
||||
/* 一直等待, 直到缓冲区为空 */
|
||||
while (!(pUART->S1 & UART_S1_TDRE_MASK));
|
||||
|
||||
/* 发送字符到数据寄存器 */
|
||||
pUART->D = (uint8_t)u8Char;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 波特率设置.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] pConfig 波特率相关配置结构体
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_SetBaudrate(UART_Type *pUART, UART_ConfigBaudrateType *pConfig)
|
||||
{
|
||||
uint8_t u8Temp;
|
||||
uint16_t u16Sbr;
|
||||
uint32_t u32SysClk = pConfig->u32SysClkHz;
|
||||
uint32_t u32baud = pConfig->u32Baudrate;
|
||||
|
||||
/* 合法性检测 */
|
||||
ASSERT((pUART == UART0) || (pUART == UART1) || (pUART == UART2));
|
||||
|
||||
/*计算波特率,四舍五入提高精度 */
|
||||
u16Sbr = (((u32SysClk)>>4) + (u32baud>>1))/u32baud;
|
||||
|
||||
|
||||
u8Temp = pUART->BDH & ~(UART_BDH_SBR_MASK);
|
||||
|
||||
pUART->BDH = u8Temp | UART_BDH_SBR(u16Sbr >> 8);
|
||||
pUART->BDL = (uint8_t)(u16Sbr & UART_BDL_SBR_MASK);
|
||||
|
||||
|
||||
pUART->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK );
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能UART中断.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] InterruptType 中断的类型
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_EnableInterrupt(UART_Type *pUART, UART_InterruptType InterruptType)
|
||||
{
|
||||
|
||||
/* 通道合法性检查 */
|
||||
ASSERT((pUART == UART0) || (pUART == UART1) || (pUART == UART2));
|
||||
|
||||
if (InterruptType == UART_TxBuffEmptyInt) //发送中断使能
|
||||
{
|
||||
pUART->C2 |= UART_C2_TIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_TxCompleteInt) //传输完成中断使能
|
||||
{
|
||||
pUART->C2 |= UART_C2_TCIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_RxBuffFullInt) //接收器中断使能
|
||||
{
|
||||
pUART->C2 |= UART_C2_RIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_IdleLineInt) //空闲线中断使能
|
||||
{
|
||||
pUART->C2 |= UART_C2_ILIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_RxOverrunInt) //过载中断使能
|
||||
{
|
||||
pUART->C3 |= UART_C3_ORIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_NoiseErrorInt) //噪声错误中断使能
|
||||
{
|
||||
pUART->C3 |= UART_C3_NEIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_FramingErrorInt) //帧错误中断使能
|
||||
{
|
||||
pUART->C3 |= UART_C3_FEIE_MASK;
|
||||
}
|
||||
else if (InterruptType == UART_ParityErrorInt) //奇偶校验中断使能
|
||||
{
|
||||
pUART->C3 |= UART_C3_FEIE_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
//其他暂不支持类型的中断
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用UART中断.
|
||||
*
|
||||
* @param[in] 指向三个UART其中一个的基址
|
||||
* @param[in] 中断的类型
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_DisableInterrupt(UART_Type *pUART, UART_InterruptType InterruptType)
|
||||
{
|
||||
/* 通道合法性检查 */
|
||||
ASSERT((pUART == UART0) || (pUART == UART1) || (pUART == UART2));
|
||||
|
||||
|
||||
if (InterruptType == UART_TxBuffEmptyInt) //发送中断禁用
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_TIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_TxCompleteInt) //传输完成中断禁用
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_TCIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_RxBuffFullInt) //接收器中断禁用
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_RIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_IdleLineInt) //空闲线中断禁用
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_ILIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_RxOverrunInt) //过载中断禁用
|
||||
{
|
||||
pUART->C3 &= (~UART_C3_ORIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_NoiseErrorInt) //噪声错误中断禁用
|
||||
{
|
||||
pUART->C3 &= (~UART_C3_NEIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_FramingErrorInt) //帧错误中断禁用
|
||||
{
|
||||
pUART->C3 &= (~UART_C3_FEIE_MASK);
|
||||
}
|
||||
else if (InterruptType == UART_ParityErrorInt) //奇偶校验中断禁用
|
||||
{
|
||||
pUART->C3 &= (~UART_C3_FEIE_MASK);
|
||||
}
|
||||
else
|
||||
{
|
||||
//其他暂不支持类型的中断
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 从两个状态寄存器获取UART状态
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return 16位的状态
|
||||
*
|
||||
*****************************************************************************/
|
||||
uint16_t UART_GetFlags(UART_Type *pUART)
|
||||
{
|
||||
uint16_t u16StatusFlags = 0;//先清空标志位
|
||||
|
||||
u16StatusFlags = pUART->S2; //将状态寄存器 2 的值赋给标志参数
|
||||
u16StatusFlags = (u16StatusFlags<<8)| pUART->S1; //两个状态寄存器拼接赋给标志参数
|
||||
|
||||
return u16StatusFlags;//返回标志参数的值
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 检查特定的位是否置位.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] FlagType 位的类型
|
||||
*
|
||||
* @return
|
||||
* 1, 标志置位
|
||||
* 0, 标志清零
|
||||
*
|
||||
*****************************************************************************/
|
||||
uint8_t UART_CheckFlag(UART_Type *pUART, UART_FlagType FlagType)
|
||||
{
|
||||
uint16_t u16StatusFlags = 0;
|
||||
|
||||
u16StatusFlags = UART_GetFlags(pUART);
|
||||
|
||||
return (u16StatusFlags & (1<<FlagType));
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 用查询模式发送字符串.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] pSendBuff 字符串首地址
|
||||
* @param[in] u32Length 字符串的长度
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_SendWait(UART_Type *pUART, uint8_t *pSendBuff, uint32_t u32Length)
|
||||
{
|
||||
uint8_t u8TxChar;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < u32Length; i++)
|
||||
{
|
||||
u8TxChar = pSendBuff[i];
|
||||
while (!UART_IsTxBuffEmpty(pUART))
|
||||
{
|
||||
#if defined(ENABLE_WDOG)
|
||||
WDOG_Feed();
|
||||
#endif
|
||||
}
|
||||
UART_WriteDataReg(pUART, u8TxChar);
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 用查询模式接收字符串.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] pReceiveBuff 定义接收字符串的首地址
|
||||
* @param[in] u32Length 所要接收字符串的长度
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_ReceiveWait(UART_Type *pUART, uint8_t *pReceiveBuff, uint32_t u32Length)
|
||||
{
|
||||
uint8_t u8RxChar;
|
||||
uint32_t i;
|
||||
|
||||
for (i = 0; i < u32Length; i++)
|
||||
{
|
||||
while (!UART_IsRxBuffFull(pUART))
|
||||
{
|
||||
#if defined(ENABLE_WDOG)
|
||||
WDOG_Feed();
|
||||
#endif
|
||||
}
|
||||
u8RxChar = UART_ReadDataReg(pUART);
|
||||
pReceiveBuff[i] = u8RxChar;
|
||||
}
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 等待发送完成.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_WaitTxComplete(UART_Type *pUART)
|
||||
{
|
||||
while (!UART_IsTxComplete(pUART));//一直等待直到发送完成
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置UART模块的中断回调函数.
|
||||
*
|
||||
* @param[in] pfnCallback 回调函数的地址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART_SetCallback(UART_CallbackType pfnCallback)
|
||||
{
|
||||
UART_Callback = pfnCallback;
|
||||
}
|
||||
|
||||
|
||||
/*! @} */
|
||||
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief uart0 中断服务函数.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART0_Isr(void)
|
||||
{
|
||||
UART_Callback(UART0);
|
||||
}
|
||||
|
||||
|
||||
#if defined(CPU_NV32)
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief uart0 中断服务函数.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART1_Isr(void)
|
||||
{
|
||||
UART_Callback(UART1);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief uart0 中断服务函数.
|
||||
*
|
||||
* @param none
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
void UART2_Isr(void)
|
||||
{
|
||||
UART_Callback(UART2);
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,461 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* @brief UART 驱动头文件.
|
||||
*
|
||||
******************************************************************************/
|
||||
#ifndef _UART_H_
|
||||
#define _UART_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "common.h"
|
||||
#include "wdog.h"
|
||||
|
||||
#define MAX_UART_NO 3
|
||||
|
||||
|
||||
/*!
|
||||
* @brief UART 设置类型.
|
||||
*
|
||||
*/
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint32_t bEnable : 1; /*!< 1: 使能, 0: 禁用 */
|
||||
uint32_t resvd : 31; /*!< 1: 保留位域 */
|
||||
} UART_SettingType;
|
||||
/*! @} */
|
||||
|
||||
/*!
|
||||
* @brief UART 配置结构体.
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
UART_SettingType sSettings; /*!< UART 设置 */
|
||||
uint32_t u32SysClkHz; /*!< 系统时钟 */
|
||||
uint32_t u32Baudrate; /*!< UART 波特率 */
|
||||
} UART_ConfigType;
|
||||
/*! @} */
|
||||
|
||||
/*!
|
||||
* @brief UART 波特率配置结构体.
|
||||
*
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
uint32_t u32SysClkHz; /*!< 系统时钟 */
|
||||
uint32_t u32Baudrate; /*!< UART 波特率 */
|
||||
} UART_ConfigBaudrateType;
|
||||
/*! @} */
|
||||
|
||||
/******************************************************************************
|
||||
*define uart配置模式列表
|
||||
*
|
||||
*//*! @uart配置模式列表
|
||||
* @{
|
||||
******************************************************************************/
|
||||
typedef enum
|
||||
{
|
||||
UART_Mode8Bit, /*!< 8位模式 */
|
||||
UART_Mode9Bit, /*!< 9位模式 */
|
||||
UART_ModeEnableLoopback, /*!< 使能环回模式 */
|
||||
UART_ModeDisableLoopback, /*!< 禁用环回模式*/
|
||||
UART_ModeEnableSingleWire, /*!< 使能UART单线模式 */
|
||||
UART_ModeDisableSingleWire, /*!< 禁用UART单线模式 */
|
||||
} UART_ModeType;
|
||||
/*! @} */
|
||||
|
||||
/******************************************************************************
|
||||
*define uart中断类型
|
||||
*
|
||||
*//*! @uart中断类型列表
|
||||
* @{
|
||||
******************************************************************************/
|
||||
|
||||
typedef enum
|
||||
{
|
||||
UART_TxBuffEmptyInt, /*!< 发送中断 */
|
||||
UART_TxCompleteInt, /*!< 传输完成中断 */
|
||||
UART_RxBuffFullInt, /*!< 接收器中断 */
|
||||
|
||||
UART_IdleLineInt, /*!< 空闲线中断 */
|
||||
|
||||
UART_RxOverrunInt, /*!< 过载中断 */
|
||||
UART_NoiseErrorInt, /*!< 噪声错误中断 */
|
||||
UART_FramingErrorInt, /*!< /帧错误中断 */
|
||||
UART_ParityErrorInt, /*!< 奇偶校验中断 */
|
||||
} UART_InterruptType;
|
||||
/*! @} */
|
||||
|
||||
/******************************************************************************
|
||||
*define uart标志类型定义
|
||||
*
|
||||
*//*! @uart标志类型定义列表
|
||||
* @{
|
||||
******************************************************************************/
|
||||
typedef enum
|
||||
{
|
||||
UART_FlagPF = 0, /*!< 奇数 */
|
||||
UART_FlagFE, /*!< 帧错误标志 */
|
||||
UART_FlagNF, /*!< 噪声标志 */
|
||||
UART_FlagOR, /*!< 接收过载 */
|
||||
UART_FlagIDLE, /*!< 空闲线标志 */
|
||||
UART_FlagRDRF, /*!< 接收数据满标志 */
|
||||
UART_FlagTC, /*!< 发送完成标志 */
|
||||
UART_FlagTDRE, /*!< 发送寄存器空标志 */
|
||||
|
||||
UART_FlagRAF, /*!< 有效接收器标志 */
|
||||
UART_FlagLBKDE, /*!< LIN间隔检测使能 */
|
||||
UART_FlagBRK13, /*!< 间隔字符长度 */
|
||||
UART_FlagRWUID, /*!< 接收唤醒空闲检测 */
|
||||
UART_FlagRXINV, /*!< 接收数据反转 */
|
||||
UART_FlagRev1, /*!< 保留 */
|
||||
UART_FlagRXEDGIF, /*!< RXD引脚的有效边沿中断标志 */
|
||||
UART_FlagLBKDIF, /*!< LIN终止检测中断标志 */
|
||||
} UART_FlagType;
|
||||
/*! @} */
|
||||
|
||||
/*!
|
||||
* @brief UART 回调类型.
|
||||
*
|
||||
*/
|
||||
typedef void (*UART_CallbackType)(UART_Type *pUART);
|
||||
|
||||
/******************************************************************************
|
||||
******************************************************************************/
|
||||
|
||||
/*!
|
||||
* 内联函数
|
||||
*/
|
||||
/******************************************************************************
|
||||
*******************************************************************************/
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 读取接收数据
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return 接收到的字符
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t UART_ReadDataReg(UART_Type *pUART)
|
||||
{
|
||||
return pUART->D;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 写发送字符
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
* @param[in] u8Char 需要发送的字符
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_WriteDataReg(UART_Type *pUART, uint8_t u8Char)
|
||||
{
|
||||
pUART->D = (uint8_t)u8Char;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 检测接收数据寄存器是否满
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return 0, 没有字符接收; 非0, 有字符接收到
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t UART_CharPresent(UART_Type *pUART)
|
||||
{
|
||||
return (pUART->S1 & UART_S1_RDRF_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能发送器
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableTx(UART_Type *pUART)
|
||||
{
|
||||
|
||||
pUART->C2 |= UART_C2_TE_MASK;
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用发送器
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_DisableTx(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_TE_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能接收器
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableRx(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 |= UART_C2_RE_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用接收器
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_DisableRx(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_RE_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能循环模式
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableLoopback(UART_Type *pUART)
|
||||
{
|
||||
pUART->C1 |= UART_C1_LOOPS_MASK;
|
||||
pUART->C1 &= (~UART_C1_RSRC_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能单线模式
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableSingleWire(UART_Type *pUART)
|
||||
{
|
||||
pUART->C1 |= UART_C1_LOOPS_MASK;
|
||||
pUART->C1 |= UART_C1_RSRC_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置8位模式
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_Set8BitMode(UART_Type *pUART)
|
||||
{
|
||||
pUART->C1 &= (~UART_C1_M_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 设置9位模式
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_Set9BitMode(UART_Type *pUART)
|
||||
{
|
||||
pUART->C1 |= UART_C1_M_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能发送空中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableTxBuffEmptyInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 |= UART_C2_TIE_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能发送完成中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableTxCompleteInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 |= UART_C2_TCIE_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 使能接收满中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_EnableRxBuffFullInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 |= UART_C2_RIE_MASK;
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用发送空中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_DisableTxBuffEmptyInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_TIE_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用传输完成中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_DisableTxCompleteInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_TCIE_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 禁用接收满中断
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_DisableRxBuffFullInt(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 &= (~UART_C2_RIE_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 发送间隔字符
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return none
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE void UART_PutBreak(UART_Type *pUART)
|
||||
{
|
||||
pUART->C2 |= UART_C2_SBK_MASK;
|
||||
pUART->C2 &= (~UART_C2_SBK_MASK);
|
||||
}
|
||||
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 检测发送完成标志.
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return
|
||||
* 1, 发送标志置位
|
||||
* 0, 发送标志清除
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t UART_IsTxComplete(UART_Type *pUART)
|
||||
{
|
||||
return (pUART->S1 & UART_S1_TC_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 检测发送寄存器是否空
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return
|
||||
* 1, 发送寄存器空
|
||||
* 0, 发送寄存器不为空
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t UART_IsTxBuffEmpty(UART_Type *pUART)
|
||||
{
|
||||
return (pUART->S1 & UART_S1_TDRE_MASK);
|
||||
}
|
||||
/*****************************************************************************//*!
|
||||
*
|
||||
* @brief 检测接收数据寄存器是否满
|
||||
*
|
||||
* @param[in] pUART 指向三个UART其中一个的基址
|
||||
*
|
||||
* @return
|
||||
* 1, 接收数据寄存器满
|
||||
* 0, 接收数据寄存器不为满
|
||||
*
|
||||
*****************************************************************************/
|
||||
__STATIC_INLINE uint8_t UART_IsRxBuffFull(UART_Type *pUART)
|
||||
{
|
||||
return (pUART->S1 & UART_S1_RDRF_MASK);
|
||||
}
|
||||
/*! @} */
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
******************************************************************************/
|
||||
void UART_Init(UART_Type *pUART, UART_ConfigType *pConfig);
|
||||
uint8_t UART_GetChar(UART_Type *pUART);
|
||||
void UART_PutChar(UART_Type *pUART, uint8_t u8Char);
|
||||
void UART_SetBaudrate(UART_Type *pUART, UART_ConfigBaudrateType *pConfig);
|
||||
void UART_EnableInterrupt(UART_Type *pUART, UART_InterruptType InterruptType);
|
||||
void UART_DisableInterrupt(UART_Type *pUART, UART_InterruptType InterruptType);
|
||||
uint16_t UART_GetFlags(UART_Type *pUART);
|
||||
uint8_t UART_CheckFlag(UART_Type *pUART, UART_FlagType FlagType);
|
||||
void UART_SendWait(UART_Type *pUART, uint8_t *pSendBuff, uint32_t u32Length);
|
||||
void UART_ReceiveWait(UART_Type *pUART, uint8_t *pReceiveBuff, uint32_t u32Length);
|
||||
void UART_WaitTxComplete(UART_Type *pUART);
|
||||
void UART_SetCallback(UART_CallbackType pfnCallback);
|
||||
void UART0_Isr(void);
|
||||
void UART1_Isr(void);
|
||||
void UART2_Isr(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /* #ifndef _UART_H_ */
|
||||
Reference in New Issue
Block a user