| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- /***************************************************************
- *Copyright (C), 2017, Shanghai Eastsoft Microelectronics Co., Ltd
- *文件名: lib_uart.c
- *作 者: Liut
- *版 本: V1.00
- *日 期: 2017/07/14
- *描 述: UART模块库函数
- *备 注: 适用于 ES8P508x芯片
- 本软件仅供学习和演示使用,对用户直接引用代码所带来的风险或后果不承担任何法律责任。
- ***************************************************************/
- #include "lib_uart.h"
- /***************************************************************
- 函数名:UART_Init
- 描 述:UART初始化
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 UART_InitStruct:初始化配置结构体地址
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_Init(UART_TypeDef* UARTx,UART_InitStruType* UART_InitStruct)
- {
- uint32_t BaudClockTemp = 0, BaudTemp = 0;
- if(UART_InitStruct->UART_ClockSet == UART_Clock_1)
- {
- BaudClockTemp = (SystemCoreClock/16)%UART_InitStruct->UART_BaudRate;
- if(UART_InitStruct->UART_BaudRate >= (2*BaudClockTemp))
- {
- BaudTemp = (SystemCoreClock/16/UART_InitStruct->UART_BaudRate)-1;
- }
- else
- {
- BaudTemp = SystemCoreClock/16/UART_InitStruct->UART_BaudRate;
- }
- }
- else if(UART_InitStruct->UART_ClockSet == UART_Clock_2)
- {
- BaudClockTemp = (SystemCoreClock/32)%UART_InitStruct->UART_BaudRate;
- if(UART_InitStruct->UART_BaudRate >= (2*BaudClockTemp))
- {
- BaudTemp = (SystemCoreClock/32/UART_InitStruct->UART_BaudRate)-1;
- }
- else
- {
- BaudTemp = SystemCoreClock/32/UART_InitStruct->UART_BaudRate;
- }
- }
- else if(UART_InitStruct->UART_ClockSet == UART_Clock_4)
- {
- BaudClockTemp = (SystemCoreClock/64)%UART_InitStruct->UART_BaudRate;
- if(UART_InitStruct->UART_BaudRate >= (2*BaudClockTemp))
- {
- BaudTemp = (SystemCoreClock/64/UART_InitStruct->UART_BaudRate)-1;
- }
- else
- {
- BaudTemp = SystemCoreClock/64/UART_InitStruct->UART_BaudRate;
- }
- }
- if(BaudTemp > 2046)
- {
- BaudTemp = 2047;
- }
- UARTx->CON.BCS = UART_InitStruct->UART_ClockSet;
- UARTx->BRR.BRR = BaudTemp ;
- UARTx->CON.TXFS = UART_InitStruct->UART_StopBits;
- UARTx->CON.TXMOD = UART_InitStruct->UART_TxMode;
- UARTx->CON.TXP = UART_InitStruct->UART_TxPolar;
- UARTx->CON.RXMOD = UART_InitStruct->UART_RxMode;
- UARTx->CON.RXP = UART_InitStruct->UART_RxPolar;
- }
- /***************************************************************
- 函数名:UART_ITConfig
- 描 述:UART中断配置
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 UART_IT:中断类型 、 NewState:使能/失能
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_ITConfig(UART_TypeDef* UARTx,UART_TYPE_IT UART_IT,TYPE_FUNCEN NewState)
- {
- if (NewState != DISABLE)
- UARTx->IE.Word = (UARTx->IE.Word & (uint32_t)0x0000FFFF) | (uint32_t) UART_IT;
- else
- UARTx->IE.Word = (UARTx->IE.Word & (uint32_t)0x0000FFFF) & (~((uint32_t) UART_IT));
- }
- /***************************************************************
- 函数名:UART_TBIMConfig
- 描 述:UART发送缓冲器空中断模式选择
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 Type:空中断模式
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_TBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type)
- {
- UARTx->IE.TBIM = Type;
- }
- /***************************************************************
- 函数名:UART_RBIMConfig
- 描 述:UART接收缓冲器满中断模式选择
- 输入值:UARTx:可以是UART0/1/2/3 、 Type:满中断模式
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_RBIMConfig(UART_TypeDef* UARTx,UART_TYPE_TRBIM Type)
- {
- UARTx->IE.RBIM = Type;
- }
- /***************************************************************
- 函数名:UART_Sendxxxx
- 描 述:UART发送字节、半字、字
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 数据
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_SendByte(UART_TypeDef* UARTx,uint8_t Temp08)
- {
- UARTx->TBW.Byte[0] = Temp08;
- }
- void UART_SendHalfWord(UART_TypeDef* UARTx,uint16_t Temp16)
- {
- UARTx->TBW.HalfWord[0] = Temp16;
- }
- void UART_SendWord(UART_TypeDef* UARTx,uint32_t Temp32)
- {
- UARTx->TBW.Word = Temp32;
- }
- /***************************************************************
- 函数名:UART_Recxxxx
- 描 述:UART接收字节、半字、字
- 输入值:UARTx:可以是UART0/1/2/3/4/5
- 输出值:无
- 返回值:数据
- ***************************************************************/
- uint8_t UART_RecByte(UART_TypeDef* UARTx)
- {
- return UARTx->RBR.Byte[0];
- }
- uint16_t UART_RecHalfWord(UART_TypeDef* UARTx)
- {
- return UARTx->RBR.HalfWord[0];
- }
- uint32_t UART_RecWord(UART_TypeDef* UARTx)
- {
- return UARTx->RBR.Word;
- }
- /***************************************************************
- 函数名:UART_GetFlagStatus
- 描 述:UART获取标志位状态
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 UART_Flag:标志位
- 输出值:无
- 返回值:SET/RESET
- ***************************************************************/
- FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx,UART_TYPE_FLAG UART_Flag)
- {
- FlagStatus bitstatus = RESET;
- if ((UARTx->IF.Word & ((uint32_t)UART_Flag)) != RESET)
- bitstatus = SET;
- else
- bitstatus = RESET;
- return bitstatus;
- }
- /***************************************************************
- 函数名:UART_GetITStatus
- 描 述:UART获取中断状态
- 输入值:UARTx:可以是UART0/1/2/3/4/5 、 UART_Flag:标志位
- 输出值:无
- 返回值:SET/RESET
- ***************************************************************/
- ITStatus UART_GetITStatus(UART_TypeDef* UARTx,UART_TYPE_IT UART_IT)
- {
- FlagStatus bitstatus = RESET;
- if((UARTx->IE.Word & ((uint32_t)UART_IT)) == 0)
- bitstatus = RESET;
- else
- bitstatus = SET;
- return bitstatus;
- }
- /***************************************************************
- 函数名:UART_ClearIFPendingBit
- 描 述:UART标志位清除
- 输入值:UARTx:可以是UART0/1/2/3/4/5、 UART_Flag:标志位
- 输出值:无
- 返回值:无
- ***************************************************************/
- void UART_ClearIFPendingBit(UART_TypeDef* UARTx,UART_CLR_IF UART_Flag)
- {
- UARTx->IF.Word = (uint32_t)UART_Flag;
- }
- /*************************END OF FILE**********************/
|