📄 main.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 + -