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

📄 uart_irq.h

📁 3个串口接收
💻 H
📖 第 1 页 / 共 2 页
字号:
					  	  	if (pline2 < plast2)
					  	  	{
					  	  	memcpy(p3,buf2+plast2,1024-plast2);
					  	  	p3 += (1024-plast2);
					  	  	memcpy(p3,buf2,pline2);					  	  
					  	  	p3 += pline2;					  	   
					  	  	} 
					  	   
					  	   flag = 1;
					  	  
					  	   plast2 = pline2;
					  	 
					  	  
					  	  }
					  	  else
					  	     pline2++;
				           
					   
				  	    }
				  	
			             else 
			            
			                pline2++;
			             
			         
			            
			            
			       if(pline2>1023)
				        
				       pline2 = 0;
				       
					
					
				}
				else
				{
				
					break;
				}


			default:
				
				break;
				
				
		}
	}
	
	rx_ready2 = 1;		
	VICVectAddr = 0x00;						
}





/*********************************************************************************************************
** 函数名称 :IRQ_UART3Recv
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/

void __irq IRQ_UART3Recv(void)
{
	uint32 i   = 0;
	uint32 IIR = 0;

	// 			UART0接收中断处理 			
	while (((IIR = U3IIR) & 0x01) == 0)		// 若尚有中断待处理
	{
		
		switch (IIR & 0x0e)
		{
			
			// RDA中断处理入口 
			case 0x04:
			
			   					
				//tc=3;
				*(buf4+pline4)= U3RBR;	
								
				   if(*(buf4+pline4)==0x0a)
				  	   {  
				  		
					   
					  	 if(tx_busy3==0)
					  	 {
					  	    pline4++;
					  	  	flag3 = 0;
					  	  	if (pline4 > plast4)
					  	  	{					  	  
					  	 	memcpy(p5,buf4+plast4,pline4-plast4);
					  	  	p5 += (pline4-plast4);
					  	  	pline5 += (pline4-plast4);
					  	  	
					  	  	}
					  	  
					  	  	if (pline4 < plast4)
					  	  	{
					  	  	memcpy(p5,buf4+plast4,1024-plast4);
					  	  	p5 += (1024-plast4);
					  	  	pline5 += (1024-plast4);
					  	  	memcpy(p5,buf4,pline4);					  	  
					  	  	p5 += pline4;	
					  	  	pline5 += pline4;				  	   
					  	  	} 
					  	   
					  	   flag3 = 1;
					  	  
					  	   plast4 = pline4;
					  	 
					  	  
					  	  }
					  	  else
					  	   pline4++;
				           
					   
				  	    }
				  	
			        else 
			            
			             pline4++;
			             
			         
			            
			            
			       if(pline4>1023)
				        
				       pline4 = 0;
				       
				   if(pline5 > 900)
				      {
				       memset(buf5,0,1024);
				       p5 = buf5;
				       pline5 = 0;
				      }    

				break;
								
			// CTI中断处理入口 
			case 0x0c:
				U3Rcv_New = 1;
				if( *(p4+pline4) != '\0')
				{
				
				 //tc=3;
				 *(buf4+pline4)= U3RBR;	
								
				   if(*(buf4+pline4)==0x0a)
				  	   {  
				  		
					   
					  	 if(tx_busy3==0)
					  	 {
					  	    pline4++;
					  	  	flag3 = 0;
					  	  	if (pline4 > plast4)
					  	  	{					  	  
					  	 	memcpy(p5,buf4+plast4,pline4-plast4);
					  	  	p5 += (pline4-plast4);
					  	  	}
					  	  
					  	  	if (pline4 < plast4)
					  	  	{
					  	  	memcpy(p5,buf4+plast4,1024-plast4);
					  	  	p5 += (1024-plast4);
					  	  	memcpy(p5,buf4,pline4);					  	  
					  	  	p5 += pline4;					  	   
					  	  	} 
					  	   
					  	   flag3 = 1;
					  	  
					  	   plast4 = pline4;
					  	 
					  	  
					  	  }
					  	  else
					  	   pline4++;
				           
					   
				  	    }
				  	
			        else 
			            
			             pline4++;
			             
			         
			            
			            
			       if(pline4>1023)
				        
				       pline4 = 0;

					
					
				}
				else
		
                //rx_ready3 = 1;
					break;
				


			default:
				//rx_ready3 = 1;
				    break;
				
				
		}
	}
	
	
	rx_ready3 = 1;		
	VICVectAddr = 0x00;						
}


/*********************************************************************************************************
** 函数名称 :UART1_RecvByte
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/

char UART1_RecvByte(char rcv_data)
{
//	char rcv_data;
	while((U1LSR&0x01)==0);    //查询数据是否接收完毕
	rcv_data = U0RBR;
	return(rcv_data);
}



/*********************************************************************************************************
** 函数名称 :IRQ_UART1Recv
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*******************************************************************************************************/

void __irq IRQ_UART1Recv(void)
{
	uint32 i   = 0;
	uint32 IIR = 0;

	// 			UART0接收中断处理 			
	while (((IIR = U1IIR) & 0x01) == 0)		// 若尚有中断待处理
	{  

		switch (IIR & 0x0e)
		{
            
			// RDA中断处理入口 
			case 0x04:			
			   tc = 5;	
			   *(buf0+pline0)= U1RBR;
			   
			   if (*(buf0+pline0)==0x0a)
			   			{  
			   			   
			   			   if(tx_busy1 == 0)
			   			   {
			   			      pline0++;
			   			      flag0 = 0;
			   			      if(pline0 > plast0)
			   			      {
			   			      memcpy(p1,buf0+plast0,pline0-plast0);
			   			      p1 += (pline0-plast0);
			   			      pline1 += (pline0-plast0);
			   			      }
			   			      
			   			      if(pline0 < plast0)
			   			      { 
			   			      memcpy(p1,buf0+plast0,1024-plast0);
			   			      p1 += (1024-plast0);
			   			      pline1 += (1024-plast0);
			   			      memcpy(p1,buf0,pline0);
			   			      p1 += pline0;
			   			      pline1 += pline0;
			   			      }
			   			      flag0 = 1;
			   			      plast0 = pline0;
			   			   }
			   			   
			   			   else 
			   			      pline0++;
			   			      
			   			      
			   			      
			   			}
			   			
			   			
			   	else 
			   	        pline0++;
			   	        
			   	        
			   	        
			   	if(pline0 > 1023)
			   	        pline0 = 0;
			   	if(pline1 > 900)
			   	      { 
			   	        memset(buf1,0,1024);
			   	        pline1 = 0;
			   	        p1 = buf1;
			   	      } 
			   	        
			   	        
			   	break;
			   	
			   	
			  // CTI中断处理入口 
			case 0x0c: 	
			   	
			   	tc=5;
			   	if(*(buf0+pline0) != '\0')
				{   
				    
					*(buf0+pline0)= U1RBR;    
					            
			   	     if (*(buf0+pline0)==0x0a)
			   			{  
			   			   
			   			   if(tx_busy1 == 0)
			   			   {
			   			      pline0++;
			   			      flag0 = 0;
			   			      if(pline0 > plast0)
			   			      {
			   			      memcpy(p1,buf0+plast0,pline0-plast0);
			   			      p1 += (pline0-plast0);
			   			      }
			   			      
			   			      if(pline0 < plast0)
			   			      { 
			   			      memcpy(p1,buf0+plast0,1024-plast0);
			   			      p1 += (1024-plast0);
			   			      memcpy(p1,buf0,pline0);
			   			      p1 += pline0;
			   			      }
			   			    flag0 = 1;
			   			    plast0 = pline0;
			   			   }
			   			   
			   			   else 
			   			      pline0++;
			   			      
			   			      
			   			      
			   			}
			   			
			   			
			   	else 
			   	        pline0++;
			   	        
			   	        
			   	        
			   	if(pline0 > 1023)
			   	        pline0 = 0;    
			   	        
			   	        
			   	}        
			   	        		          			   			      
			   	else
				
				
					break;
				


			default:
				
				    break;
				
				
		}
	}
	
	rx_ready0 = 1;		
	VICVectAddr = 0x00;						
}

		      
			   			      
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			
			   			 
			
			       					
				

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -