rt-thread-official/bsp/swm320/libraries/SWM320_StdPeriph_Driver/SWM320_uart.c

568 lines
28 KiB
C
Raw Normal View History

2021-02-18 13:29:12 +08:00
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : SWM320_uart.c
* : SWM320单片机的UART串口功能驱动库
* : http://www.synwit.com.cn/e/tool/gbook/?bid=1
* : LIN功能相关的函数
* : V1.1.0 20171025
* :
2021-02-18 13:29:12 +08:00
*
*
*******************************************************************************************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
* REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
* FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
* OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
* -ECTION WITH THEIR PRODUCTS.
*
* COPYRIGHT 2012 Synwit Technology
*******************************************************************************************************************************************/
#include "SWM320.h"
#include "SWM320_uart.h"
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_Init()
* : UART串口初始化
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* UART_InitStructure * initStruct UART串口相关设定值的结构体
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_Init(UART_TypeDef *UARTx, UART_InitStructure *initStruct)
{
switch ((uint32_t)UARTx)
{
case ((uint32_t)UART0):
SYS->CLKEN |= (0x01 << SYS_CLKEN_UART0_Pos);
break;
case ((uint32_t)UART1):
SYS->CLKEN |= (0x01 << SYS_CLKEN_UART1_Pos);
break;
case ((uint32_t)UART2):
SYS->CLKEN |= (0x01 << SYS_CLKEN_UART2_Pos);
break;
case ((uint32_t)UART3):
SYS->CLKEN |= (0x01 << SYS_CLKEN_UART3_Pos);
break;
}
UART_Close(UARTx); //一些关键寄存器只能在串口关闭时设置
UARTx->CTRL |= (0x01 << UART_CTRL_BAUDEN_Pos);
UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
UARTx->BAUD |= ((SystemCoreClock / 16 / initStruct->Baudrate - 1) << UART_BAUD_BAUD_Pos);
UARTx->CTRL &= ~(UART_CTRL_DATA9b_Msk | UART_CTRL_PARITY_Msk | UART_CTRL_STOP2b_Msk);
UARTx->CTRL |= (initStruct->DataBits << UART_CTRL_DATA9b_Pos) |
(initStruct->Parity << UART_CTRL_PARITY_Pos) |
(initStruct->StopBits << UART_CTRL_STOP2b_Pos);
/* 在SWM320中当 RXLVL >= RXTHR 时触发中断如果RXTHR设置为0的话在未接收到数据时就会一直触发中断
2021-05-06 10:10:29 +08:00
RXLVL > RXTHR SWM320中RXTHR不能为0的问题APIRXTHR设置值加一
2021-02-18 13:29:12 +08:00
*/
2021-05-06 10:42:41 +08:00
switch ((uint32_t)UARTx) // 软件复位不能清零 NVIC 寄存器,若不手动清除,下面的代码清零 RXTHR 时会导致一直进入 ISR
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
case ((uint32_t)UART0):
NVIC_DisableIRQ(UART0_IRQn);
break;
case ((uint32_t)UART1):
NVIC_DisableIRQ(UART1_IRQn);
break;
case ((uint32_t)UART2):
NVIC_DisableIRQ(UART2_IRQn);
break;
case ((uint32_t)UART3):
NVIC_DisableIRQ(UART3_IRQn);
break;
}
UARTx->FIFO &= ~(UART_FIFO_RXTHR_Msk | UART_FIFO_TXTHR_Msk);
UARTx->FIFO |= ((initStruct->RXThreshold + 1) << UART_FIFO_RXTHR_Pos) |
(initStruct->TXThreshold << UART_FIFO_TXTHR_Pos);
UARTx->CTRL &= ~UART_CTRL_TOTIME_Msk;
UARTx->CTRL |= (initStruct->TimeoutTime << UART_CTRL_TOTIME_Pos);
UARTx->CTRL &= ~(UART_CTRL_RXIE_Msk | UART_CTRL_TXIE_Msk | UART_CTRL_TOIE_Msk);
UARTx->CTRL |= (initStruct->RXThresholdIEn << UART_CTRL_RXIE_Pos) |
(initStruct->TXThresholdIEn << UART_CTRL_TXIE_Pos) |
(initStruct->TimeoutIEn << UART_CTRL_TOIE_Pos);
switch ((uint32_t)UARTx)
{
case ((uint32_t)UART0):
if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
{
NVIC_EnableIRQ(UART0_IRQn);
}
else
{
NVIC_DisableIRQ(UART0_IRQn);
}
break;
case ((uint32_t)UART1):
if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
{
NVIC_EnableIRQ(UART1_IRQn);
}
else
{
NVIC_DisableIRQ(UART1_IRQn);
}
break;
case ((uint32_t)UART2):
if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
{
NVIC_EnableIRQ(UART2_IRQn);
}
else
{
NVIC_DisableIRQ(UART2_IRQn);
}
break;
case ((uint32_t)UART3):
if (initStruct->RXThresholdIEn | initStruct->TXThresholdIEn | initStruct->TimeoutIEn)
{
NVIC_EnableIRQ(UART3_IRQn);
}
else
{
NVIC_DisableIRQ(UART3_IRQn);
}
break;
2021-02-18 13:29:12 +08:00
}
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_Open()
* : UART串口打开
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_Open(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL |= (0x01 << UART_CTRL_EN_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_Close()
* : UART串口关闭
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_Close(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL &= ~(0x01 << UART_CTRL_EN_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_WriteByte()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t data
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_WriteByte(UART_TypeDef *UARTx, uint32_t data)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->DATA = data;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_ReadByte()
* : Valid
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3UART4
* uint32_t * data
* : uint32_t 0 UART_ERR_PARITY
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_ReadByte(UART_TypeDef *UARTx, uint32_t *data)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
uint32_t reg = UARTx->DATA;
*data = (reg & UART_DATA_DATA_Msk);
if (reg & UART_DATA_PAERR_Msk)
return UART_ERR_PARITY;
return 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_IsTXBusy()
* : UART是否正在发送数据
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 UART正在发送数据 0
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_IsTXBusy(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->CTRL & UART_CTRL_TXIDLE_Msk) ? 0 : 1;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_IsRXFIFOEmpty()
* : FIFO是否为空
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空 0 FIFO非空
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_IsRXFIFOEmpty(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->CTRL & UART_CTRL_RXNE_Msk) ? 0 : 1;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_IsTXFIFOFull()
* : FIFO是否为满
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO满 0 FIFO不满
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_IsTXFIFOFull(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->CTRL & UART_CTRL_TXFF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_SetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t baudrate
* :
* : 使UART_Close()
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_SetBaudrate(UART_TypeDef *UARTx, uint32_t baudrate)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->BAUD &= ~UART_BAUD_BAUD_Msk;
UARTx->BAUD |= ((SystemCoreClock / 16 / baudrate - 1) << UART_BAUD_BAUD_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_GetBaudrate()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_GetBaudrate(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return SystemCoreClock / 16 / (((UARTx->BAUD & UART_BAUD_BAUD_Msk) >> UART_BAUD_BAUD_Pos) + 1);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_CTSConfig()
* : UART CTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使CTS流控 0 CTS流控
* uint32_t polarity 0 CTS输入为低表示可以发送数据 1 CTS输入为高表示可以发送数据
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_CTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTSCR &= ~(UART_CTSCR_EN_Msk | UART_CTSCR_POL_Msk);
UARTx->CTSCR |= (enable << UART_CTSCR_EN_Pos) |
(polarity << UART_CTSCR_POL_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_CTSLineState()
* : UART CTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 CTS线当前为低电平 1 CTS线当前为高电平
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_CTSLineState(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->CTSCR & UART_CTSCR_STAT_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_RTSConfig()
* : UART RTS流控配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t enable 1 使RTS流控 0 RTS流控
* uint32_t polarity 0 RTS输出低表示可以接收数据 1 RTS输出高表示可以接收数据
* uint32_t threshold RTS流控的触发阈值UART_RTS_1BYTEUART_RTS_2BYTEUART_RTS_4BYTEUART_RTS_6BYTE
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_RTSConfig(UART_TypeDef *UARTx, uint32_t enable, uint32_t polarity, uint32_t threshold)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->RTSCR &= ~(UART_RTSCR_EN_Msk | UART_RTSCR_POL_Msk | UART_RTSCR_THR_Msk);
UARTx->RTSCR |= (enable << UART_RTSCR_EN_Pos) |
(polarity << UART_RTSCR_POL_Pos) |
(threshold << UART_RTSCR_THR_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_RTSLineState()
* : UART RTS线当前状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 RTS线当前为低电平 1 RTS线当前为高电平
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_RTSLineState(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->RTSCR & UART_RTSCR_STAT_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_LINConfig()
* : UART LIN功能配置
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectedIEn Break中断使能
* uint32_t generatedIEn Break发送完成中断使能
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_LINConfig(UART_TypeDef *UARTx, uint32_t detectedIEn, uint32_t generatedIEn)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->LINCR &= ~(UART_LINCR_BRKDETIE_Msk | UART_LINCR_GENBRKIE_Msk);
UARTx->LINCR |= (detectedIEn << UART_LINCR_BRKDETIE_Pos) |
(generatedIEn << UART_LINCR_GENBRKIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_LINGenerate()
* : UART LIN产生/Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_LINGenerate(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->LINCR |= (1 << UART_LINCR_GENBRK_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_LINIsDetected()
* : UART LIN是否检测到Break
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_LINIsDetected(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->LINCR & UART_LINCR_BRKDETIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_LINIsGenerated()
* : UART LIN Break是否发送完成
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 LIN Break 0 LIN Break发送未完成
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_LINIsGenerated(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->LINCR & UART_LINCR_GENBRKIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_ABRStart()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* uint32_t detectChar
* 80xFF0xFE0xF80x800xFF0xFE0xF80x80
* 90x1FF0x1FE0x1F80x1800x1FF0x1FE0x1F80x180
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_ABRStart(UART_TypeDef *UARTx, uint32_t detectChar)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
uint32_t bits;
if ((detectChar == 0xFF) || (detectChar == 0x1FF))
bits = 0;
else if ((detectChar == 0xFE) || (detectChar == 0x1FE))
bits = 1;
else if ((detectChar == 0xF8) || (detectChar == 0x1F8))
bits = 2;
else if ((detectChar == 0x80) || (detectChar == 0x180))
bits = 3;
else
while (1)
;
UARTx->BAUD &= ~(UART_BAUD_ABREN_Msk | UART_BAUD_ABRBIT_Msk);
UARTx->BAUD |= (1 << UART_BAUD_ABREN_Pos) |
(bits << UART_BAUD_ABRBIT_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_ABRIsDone()
* : UART
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 0 UART_ABR_RES_OK UART_ABR_RES_ERR
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_ABRIsDone(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
if (UARTx->BAUD & UART_BAUD_ABREN_Msk)
{
return 0;
}
else if (UARTx->BAUD & UART_BAUD_ABRERR_Msk)
{
return UART_ABR_RES_ERR;
}
else
{
return UART_ABR_RES_OK;
}
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTRXThresholdEn()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTRXThresholdEn(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL |= (0x01 << UART_CTRL_RXIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTRXThresholdDis()
* : RX FIFO中数据个数 >= RXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTRXThresholdDis(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL &= ~(0x01 << UART_CTRL_RXIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTRXThresholdStat()
* : RX FIFO中数据个数 >= RXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 RX FIFO中数据个数 >= RXThreshold 0 RX FIFO中数据个数 < RXThreshold
* : RXIF = RXTHRF & RXIE
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_INTRXThresholdStat(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->BAUD & UART_BAUD_RXIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXThresholdEn()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTXThresholdEn(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL |= (0x01 << UART_CTRL_TXIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXThresholdDis()
* : TX FIFO中数据个数 <= TXThreshold时
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTXThresholdDis(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL &= ~(0x01 << UART_CTRL_TXIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXThresholdStat()
* : TX FIFO中数据个数 <= TXThreshold
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 TX FIFO中数据个数 <= TXThreshold 0 TX FIFO中数据个数 > TXThreshold
* : TXIF = TXTHRF & TXIE
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_INTTXThresholdStat(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->BAUD & UART_BAUD_TXIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTimeoutEn()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTimeoutEn(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL |= (0x01 << UART_CTRL_TOIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTimeoutDis()
* :
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTimeoutDis(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL &= ~(0x01 << UART_CTRL_TOIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTimeoutStat()
* : TimeoutTime/(Baudrate/10) RX线上接收到数据时触发中断
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 0
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_INTTimeoutStat(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->BAUD & UART_BAUD_TOIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXDoneEn()
* : FIFO空且发送移位寄存器空中断使能
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTXDoneEn(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL |= (0x01 << UART_CTRL_TXDOIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXDoneDis()
* : FIFO空且发送移位寄存器空中断禁止
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* :
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
void UART_INTTXDoneDis(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
UARTx->CTRL &= ~(0x01 << UART_CTRL_TXDOIE_Pos);
2021-02-18 13:29:12 +08:00
}
/******************************************************************************************************************************************
2021-05-06 10:10:29 +08:00
* : UART_INTTXDoneStat()
* : FIFO空且发送移位寄存器空中断状态
* : UART_TypeDef * UARTx UART串口UART0UART1UART2UART3
* : uint32_t 1 FIFO空且发送移位寄存器空 0 FIFO或发送移位寄存器未空
* :
2021-02-18 13:29:12 +08:00
******************************************************************************************************************************************/
2021-05-06 10:42:41 +08:00
uint32_t UART_INTTXDoneStat(UART_TypeDef *UARTx)
2021-02-18 13:29:12 +08:00
{
2021-05-06 10:42:41 +08:00
return (UARTx->BAUD & UART_BAUD_TXDOIF_Msk) ? 1 : 0;
2021-02-18 13:29:12 +08:00
}