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

📄 main.c

📁 MC9S12NE64串口与网络通信源代码
💻 C
字号:
/*****************************************************************************
 *
 * File Name     :main.c
 *
 * DESCRIPTION   :main file of this project
 *
 * Description   :main file
 *
 * Written by houlei @2004.10.10
 * Recently modified @2004.12.12 Tsinghua University
 *****************************************************************************/
#include <stdlib.h>
#include <hidef.h>
#include "MOTTYPES.h"
#include "IO_MAP.h"
#include "ne64api.h"
#include "ethernet.h"
#include "etherinit.h"                
#include "iv.h"

extern eth_HwAddress sed_lclEthAddr;          // the local ethernet address
extern in_HwAddress  sin_lclINAddr;           // the local ip
unsigned char volatile *EthTxBuf;             // pointer for tx buffer
tU32   myip;                                  // used to change local ip 
tU16   myport;                                // used to change local udp port
tU08 * tx_pointer;


extern tU08   emacFIFOa[EMAC_RX_SZ];		    /**< Buffer defined in "ne64api.c" */
extern tU08   emacFIFOb[EMAC_RX_SZ];			/**< Buffer defined in "ne64api.c" */
extern tU08   emacFIFOtx[EMAC_TX_SZ];			/**< Buffer defined in "ne64api.c" */

tU08 gotxflowc;	     /**<Global Variable For Determination of Flow Control Packets are sent in Full Duplex*/
tU08 gotlink;		 /**<Global Variable For Determination if link is active*/

#if ZERO_COPY
#else
  tU08 ourbuffer [1518];    /**< Space for packet temporary storage if zero copy not used*/
#endif	 //ZERO_COPY

#if RX_POLL_MODE
#else
  tU08    activebuffer=0;		/**<Global Variable that indicates which full buffer is 
                              * being processed  */
#endif  //RX_POLL_MODE



unsigned char My_GetChar(void)          //to get a char and display it on the screen
{
	unsigned char c;
    do{
       }while((SCI0SR1&0x20)==0);
    c = SCI0DRL;
//    while(!(SCI0SR1&0x80));
//    SCI0DRL = c;
    return(c);
}
void My_OutChar(tU08 c)
{
    while(!(SCI0SR1&0x80));
    SCI0DRL = c;
 }

/***************changeip() is used to get a new ip when the demo start working**************************/
/***************                                                             ***************************/
/***************                                                           ****************************/  
/***************you can use it in main() at the beginning to change a ip ******************************/

void  changeip(void)
{
	unsigned long   mytemp;
	unsigned char i,j,zero_flag;
	unsigned char	data_temp,mydata,mydata1;	
	Debugt("Default IP: 192.168.0.1.");
	Debugnl();
	Debugt("Type any key to change IP. Waiting 3 seconds...");
	Debugnl();
	
	for(mytemp=0;mytemp<2400000;mytemp++)
	{
		if(SCI0SR1&0x20)
		{
			mydata = SCI0DRL;
			break;}
	}
	if(mytemp ==2400000)//time out
	{
		sin_lclINAddr = 0xC0A80001;
		Debugt("IP not changed.\r\n");	
	}			
	else     //to change ip
	{
input_ip_address:

		Debugt("Please input the ip address.");
		Debugnl();
		Debugt("Such as ip 192.168.0.1.");
		Debugnl();
		Debugt("Such as ip 166.111.32.133.");
		Debugnl();
		Debugt("Please input: ");	

		i = 0;
		j = 0;
        data_temp=mydata=mydata1=0;
        sin_lclINAddr = 0;
        
		while(i<4)
		{
			mydata = My_GetChar();
			
			if(j==0)
			{
			   if(mydata<='2' && mydata>='0')
			   {
			     My_OutChar(mydata);
			     mydata = mydata-'0';
			     mydata1 = mydata;
			     j++;
			     }
			   else if (mydata<='9' && mydata>='3')
			   {
			     My_OutChar(mydata);
			     mydata = mydata-'0';
			     mydata1 = mydata;
			     j=2;
			     } 
			     /*
			   else if(mydata=='.')
			   {
			     My_OutChar('0');
			     My_OutChar('.');
			     i++;
			     }
			     */
			 }     
			else if(j==1)
			{
			
			   if(mydata=='.')
			   {
			      My_OutChar('.');
			      
			      sin_lclINAddr = sin_lclINAddr << 8;
			      sin_lclINAddr = sin_lclINAddr + mydata1;
			      j=0;
			      i++;
			    }  
			
			   else if(mydata1==2)
			   {
			      if(mydata<='5' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        mydata1 = mydata1*10+mydata;
			        j++;
			       }
			      else if(mydata<='9' && mydata>='6')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        mydata1 = mydata1*10+mydata;
			        sin_lclINAddr = sin_lclINAddr << 8;
			        sin_lclINAddr = sin_lclINAddr + mydata1;
			        My_OutChar('.');
			        j=0;
			        i++;
                   }

			    }   
			   else if(mydata1>=0 && mydata1<=1) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        mydata1 = mydata1*10+mydata;
			        j++;
			       }
			    }   

            }
            
            else if(j==2)
			{
			
			   if(mydata=='.')
			   {
			      My_OutChar('.');
			      
			      sin_lclINAddr = sin_lclINAddr << 8;
			      sin_lclINAddr = sin_lclINAddr + mydata1;
			      j=0;
			      i++;
			    }  
			
			   else if(mydata1==25)
			   {
			      if(mydata<='5' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        mydata1 = mydata1*10+mydata;
			        
			        My_OutChar('.');			      
     		        sin_lclINAddr = sin_lclINAddr << 8;
			        sin_lclINAddr = sin_lclINAddr + mydata1;
			        j=0;
			        i++;
			       }
			    }   
			   else if(mydata1>=0 && mydata1<=24) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        mydata1 = mydata1*10+mydata;
			        
			        My_OutChar('.');			      
     		        sin_lclINAddr = sin_lclINAddr << 8;
			        sin_lclINAddr = sin_lclINAddr + mydata1;
			        j=0;
			        i++;

			       }
			    }   

            }

          }
			
         }
         myip = sin_lclINAddr;
         Debugnl();
         Debugt("The new ip address is: ");
         i=24;
         while(i!=0xF8)
         {
           
             mytemp=sin_lclINAddr;
             mydata1=(tU08)(mytemp >> i);
             i=i-8;
             zero_flag = 0;

             mydata = mydata1/100;
             if((mydata !=0)||zero_flag)
             {   
                mydata=mydata+'0';
                My_OutChar(mydata);
                mydata1=mydata1%100;
                zero_flag = 1;
                }
             mydata = mydata1/10;
             if((mydata !=0)||zero_flag)
             {   
                mydata=mydata+'0';
                My_OutChar(mydata);
                mydata1=mydata1%10;
                zero_flag = 1;
                }
             My_OutChar(mydata1+'0');
             My_OutChar('.');
             
             } 
           
           Debugnl();
 }          


/***************changeport() is used to get a new udp port when the demo start working******************/
/***************                                                                  **********************/
/***************                                                               *************************/  
/***************you can use it in main() at the beginning to change the udp port** *********************/

void  changeport(void)
{
	unsigned long   mytemp;
	unsigned char i, zero_flag;
	unsigned char	mydata,mydata1;	
	Debugnl();
	Debugt("Default udp port:1221.");
	Debugnl();
	Debugt("Type any key to change udp port. Waiting 3 seconds...");
	Debugnl();
	
	for(mytemp=0;mytemp<2400000;mytemp++)
	{
		if(SCI0SR1&0x20)
		{
			mydata = SCI0DRL;
			break;}
	}
	if(mytemp ==2400000)//time out
	{
		myport = 1221;
		Debugt("udp port not changed.\r\n");	
	}			
	else     //to change ip
	{
input_udp_port:

		Debugt("Please input the udp port.");
		Debugnl();
		Debugt("Such as : 1221.");
		Debugnl();
		Debugt("Please input: ");	

		i = 0;
        
        while(i<5)
        {
          
	      mydata = My_GetChar();
	      
	      if((mydata=='\r')&&i)
	      {
			i = 5;
			}
		  else
		  {	 
			if(i==0)
			{
			   if(mydata<='6' && mydata>='0')
			   {
			     My_OutChar(mydata);
			     mydata = mydata-'0';
			     myport = mydata;
			    // mydata1 = mydata;
			     i++;
			     }
			   else if (mydata<='9' && mydata>='7')
			   {
			     My_OutChar(mydata);
			     mydata = mydata-'0';
			     myport = mydata;
			     i=2;
			     } 
			 }     
			else if(i==1)
			{
						
			   if(myport==6)
			   {
			      if(mydata<='5' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			      else if(mydata<='9' && mydata>='6')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i=3;
                   }

			    }   
			   else if(myport>=0 && myport<=5) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			    }   

            }
            
			else if(i==2)
			{
						
			   if(myport==65)
			   {
			      if(mydata<='5' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			      else if(mydata<='9' && mydata>='6')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i=4;
                   }

			    }   
			   else if(myport>=0 && myport<=64) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			    }   

            }
			else if(i==3)
			{
						
			   if(myport==655)
			   {
			      if(mydata<='3' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			      else if(mydata<='9' && mydata>='4')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i=5;
                   }

			    }   
			   else if(myport>=0 && myport<=654) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			    }   

            }
			else if(i==4)
			{
						
			   if(myport==6553)
			   {
			      if(mydata<='5' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			      else if(mydata<='9' && mydata>='6')
			      {
			        i++;
                   }

			    }   
			   else if(myport>=0 && myport<=6552) 
			   {
			      if(mydata<='9' && mydata>='0')
			      {
			        My_OutChar(mydata);
			        mydata = mydata-'0';
			        myport = myport*10+mydata;
			        i++;
			       }
			    }   

            }
        }  // ='\r'?, else
      }  
         Debugnl();
         Debugt("The new udp port is: ");
         mytemp=myport;
         zero_flag=0;
         
         mydata = mytemp/10000;
         if((mydata!=0)||zero_flag)
         {
             mydata=mydata+'0';
             My_OutChar(mydata);
             mytemp=mytemp%10000;
             zero_flag = 1;
             
          }
         mydata = mytemp/1000;
         if((mydata!=0)||zero_flag)
         {
             mydata=mydata+'0';
             My_OutChar(mydata);
             mytemp=mytemp%1000;
             zero_flag = 1;
             
          }
         mydata = mytemp/100;
         if((mydata!=0)||zero_flag)
         {
             mydata=mydata+'0';
             My_OutChar(mydata);
             mytemp=mytemp%100;
             zero_flag = 1;
             
          }
         mydata = mytemp/10;
         if((mydata!=0)||zero_flag)
         {
             mydata=mydata+'0';
             My_OutChar(mydata);
             mytemp=mytemp%10;
             zero_flag = 1;
             
          }
         mydata = mytemp/1;
         if((mydata!=0)||zero_flag)
         {
             mydata=mydata+'0';
             My_OutChar(mydata);
             mytemp=mytemp%1;
             zero_flag = 1;
          }
          
           Debugnl();
     }  //else//timeout        
}//

void main (void)
{	
    tU16  wordtep;
	tU16 * wordpoit;
    InitDebug();
    initialize_ne64(); 
	Debugnl();
	Debugt("\r\nStart up...");
	Debugnl();
	
    changeip();                           //used to change the ip at every restart                  
    changeport();                         //used to change the udp port at every restart        
	
	init_addr();
	EtherInit();
	udp_init();
	
    Debugt("\r\nInit Ethernet Done!\r\n");
	Debugt("System is running\r\n");
	Debugt("Waiting for ethernet call......\r\n");
    while (1)                             /* do forever to wait for emac int*/
    {
    if (gotlink) {

                  #if XFLOWC
                   if (gotxflowc)  {
                                    EtherPause(SEND_PAUSE, PAUSE_TIME);
                                    }
                  #endif
                  } 
 
    else {  }   //if (gotlink)

 } 
}

⌨️ 快捷键说明

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