⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 这是一个ucos下看门狗的驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
;** 功能描述: 通过指定的串口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 + -