📄 uart.c
字号:
;** 功能描述: 通过指定的串口8位方式发送一个字节
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:将要发送的数据
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void UART_ByteSend(UART_CHANNELS_T uart, UWORD8 *data)
{
if (UARTx_CR(uart) & (0x0001<<UART_FIFOENABLEBIT)) // if FIFO ENABLED
while((UARTx_SR(uart) & UART_TXFULL)); // while the UART_TxFIFO contain 16 characters.
else // if FIFO DISABLED
while (!(UARTx_SR(uart) & UART_TXEMPTY)); // while the transmit shift register not empty
UARTx_TxBUFR(uart) = *data;
}
/*********************************************************************************************************
;** 函数名称: UART_DataSend
;** 功能描述: 通过指定的串口发送多个数据
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:将要发送的数据
;** data_length:发送数据的长度
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void UART_DataSend(UART_CHANNELS_T uart, UWORD8 *data, UWORD8 data_length)
{
UWORD8 *string=data;
while(data_length--)
{
UART_ByteSend(uart,string++);
}
}
/*********************************************************************************************************
;** 函数名称: UART_9BitByteSend
;** 功能描述: 通过指定的串口9位方式发送一个字节
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:将要发送的数据
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void UART_9BitByteSend(UART_CHANNELS_T uart, UWORD16 *data)
{
if(UARTx_CR(uart) & (0x0001<<UART_FIFOENABLEBIT)) // if FIFO ENABLED
while((UARTx_SR(uart) & UART_TXFULL)); // while the UART_TxFIFO contain 16 characters.
else // if FIFO DISABLED
while (!(UARTx_SR(uart) & UART_TXEMPTY)); // while the transmit shift register not empty
UARTx_TxBUFR(uart) = *data;
}
/*********************************************************************************************************
;** 函数名称: UART_9BitDataSend
;** 功能描述: 通过指定的串口发送多个数据(9bit)
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:将要发送的数据
;** data_length:发送数据的长度
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void UART_9BitDataSend(UART_CHANNELS_T uart, UWORD16 *data, UWORD8 data_length)
{
while(data_length--)
{
UART_9BitByteSend(uart,data);
data++;
}
}
/*********************************************************************************************************
;** 函数名称: UART_StringSend
;** 功能描述: 通过指定的串口发送一个字符串
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** string:将要发送的字符串
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void UART_StringSend(UART_CHANNELS_T uart, UWORD8 *string)
{
UWORD8 *data=string;
while(*data != '\0')
UART_ByteSend(uart, data++);
*data='\0';
UART_ByteSend(uart, data);
}
/*********************************************************************************************************
;** 函数名称: UART_ByteAccept
;** 功能描述: 通过指定的串口收取一个字节(8bit)
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:收取数据缓冲区
:** timeout:收取数据超时设置
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 UART_ByteAccept(UART_CHANNELS_T uart, UWORD8 *data, UWORD8 timeout)
{
UWORD16 status;
UARTx_TOR(uart) = timeout;// reload the Timeout counter
while (!((status=UARTx_SR(uart)) & (UART_TIMEOUTIDLE|UART_RXHALFFULL|UART_RXBUFFULL)));// while the UART_RxFIFO is empty and no Timeoutidle
*data = (UWORD8)UARTx_RxBUFR(uart); // then read the Receive Buffer Register
return status;
}
/*********************************************************************************************************
;** 函数名称: UART_DataAccept
;** 功能描述: 通过指定的串口连续收取多个数据(8bit)
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:收取数据缓冲区
:** timeout:收取数据超时设置
;** data_length:收取数据的长度
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 UART_DataAccept(UART_CHANNELS_T uart, UWORD8 *data, UWORD8 data_length, UWORD8 timeout)
{
UWORD16 status;
while(data_length--)
status=UART_ByteAccept(uart,data++,timeout);
return status;
}
/*********************************************************************************************************
;** 函数名称: UART_9BitByteAccept
;** 功能描述: 通过指定的串口收取一个字节(9bit)
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:收取数据缓冲区
:** timeout:收取数据超时设置
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 UART_9BitByteAccept(UART_CHANNELS_T uart, UWORD16 *data, UWORD8 timeout)
{
UWORD16 status;
UARTx_TOR(uart)=timeout; // reload the Timeout counter
while (!((status=UARTx_SR(uart)) & (UART_TIMEOUTIDLE|UART_RXHALFFULL|UART_RXBUFFULL)));// while the UART_RxFIFO is empty and no Timeoutidle
*data = (UWORD16)UARTx_RxBUFR(uart); // then read the RxBUFR
return status;
}
/*********************************************************************************************************
;** 函数名称: UART_9BitDataAccept
;** 功能描述: 通过指定的串口连续收取多个数据(9bit)
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:收取数据缓冲区
:** timeout:收取数据超时设置
;** data_length:收取数据的长度
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 UART_9BitDataAccept(UART_CHANNELS_T uart, UWORD16 *data, UWORD8 data_length, UWORD8 timeout)
{
UWORD16 status;
while(data_length--)
status = UART_9BitByteAccept(uart,data++,timeout);
return status;
}
/*********************************************************************************************************
;** 函数名称: UART_StringAccept
;** 功能描述: 通过指定的串口收取一个字符串
;**
;** 参 数: uart:UART0 UART1 UART2 UART3
;** data:收取数据缓冲区
;**
;** 返 回 值: 无
;**
;** 作 者: 罗辉联
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
UWORD16 UART_StringAccept(UART_CHANNELS_T uart, UWORD8 *data)
{
UWORD8 *pSTRING = data;
UWORD16 status;
do
{
while (!((status=UARTx_SR(uart)) & (UART_RXHALFFULL|UART_RXBUFFULL))); //while the UART_RxFIFO is empty and no Timeoutidle
*(pSTRING++) = (UWORD8)UARTx_RxBUFR(uart); //then read the RxBUFR
} while((*(pSTRING - 1)!=0x0D)&(*(pSTRING - 1)!='\0'));
*(pSTRING - 1)='\0';
return status;
}
#endif //EN_ARM_UART > 0
/****************************************end of file*******************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -