📄 main.c
字号:
j=sizeof(mynetp);
j-=6; //减去MAC
p=&mynetp.myip[0];
ReadEEprom(Temp,NETPARAMETER,16);
for(i=0;i<16;i++)
*p++=Temp[i];
ReadEEprom(&Temp[16],(NETPARAMETER+16),(j-16));
for(i=16;i<j;i++)
*p++=Temp[i];
My_ip[0]=mynetp.myip[0];
My_ip[1]=mynetp.myip[1];
My_ip[2]=mynetp.myip[2];
My_ip[3]=mynetp.myip[3];
MyServerPort=mynetp.myport;
GateWayIP[0]=mynetp.gateway[0];
GateWayIP[1]=mynetp.gateway[1];
GateWayIP[2]=mynetp.gateway[2];
GateWayIP[3]=mynetp.gateway[3];
SubIPMark[0]=mynetp.submark[0];
SubIPMark[1]=mynetp.submark[1];
SubIPMark[2]=mynetp.submark[2];
SubIPMark[3]=mynetp.submark[3];
RemoteServerIP[0]=mynetp.remoteip[0];//远端服务器ip
RemoteServerIP[1]=mynetp.remoteip[1];
RemoteServerIP[2]=mynetp.remoteip[2];
RemoteServerIP[3]=mynetp.remoteip[3];
RemoteServerPort=mynetp.remoteport; //远端服务器端口号
WorkMode=mynetp.workmode;
set.baudrate=mynetp.baudrate;
set.datab=mynetp.bit;
set.stopb=mynetp.stopbit;
set.parity=mynetp.parity;
if(WorkMode==CLIENTHOST) //客户端状态为关
TcpStatus[0].State=TCP_STATE_CLOSED;
if(Testwritep()==FALSE) //设置状态
{
My_ip[0]=192;
My_ip[1]=168;
My_ip[2]=1;
My_ip[3]=100;
MyServerPort=80;
GateWayIP[0]=192;
GateWayIP[1]=168;
GateWayIP[2]=1;
GateWayIP[3]=1;
SubIPMark[0]=255;
SubIPMark[1]=255;
SubIPMark[2]=255;
SubIPMark[3]=0;
WorkMode=SERVERHOST;
TcpStatus[0].State=TCP_STATE_LISTEN;
}
}
/****************************************************/
void InitializeInterrupt (void)
{
IRQDisable();
// PINSEL0=PINSEL0|0x0000C000; // extern interrupt 2
// EXTMODE=EXTMODE|0X04; //edge interrupt
// EXTPOLAR=EXTPOLAR|0X04; //falling interrupt
/* VICIntSelect=0x00000000;
// VICVectCntl0=0x30; //exit2 assigned control 0
// VICVectAddr0=(int)IRQ_Eint2;
// EXTINT=0x04;
// VICIntEnable=0x10000;*/
//set.datab = 8;
//set.stopb = 1;
//set.parity = 0;
UART0_Init(set.baudrate); // 串口初始化
U0FCR = 0xC1; // 使能FIFO,并设置触发点为14字节
U0IER = 0x03; // 允许RBR中断,即接收中断
VICIntSelect=0x00; //select FIQ 0r IRQ
VICVectCntl1=0x20|0x06;
VICVectAddr1=(uint32)IRQ_UART0;
VICIntEnable=(1<<6); //UART0中断允许
VICVectCntl0 = (0x20 | 0x04);
VICVectAddr0 = (int32)Timer0_Handler;
VICIntEnable = VICIntEnable|(1 << 4);//Timer0中断允许
T0IR = 0xffffffff;
T0TC = 0;
T0TCR = 0x01;
T0MCR = 0x03;
T0MR0 = (Fpclk / 200);
IRQEnable();
}
/***************************************************/
uint8 InitializeClient (void)
{
uint8 i=0;
SOCKET s;
struct sockaddr servaddr;
servaddr.sin_family=0;
servaddr.sin_addr[0]=RemoteServerIP[0];
servaddr.sin_addr[1]=RemoteServerIP[1];
servaddr.sin_addr[2]=RemoteServerIP[2];
servaddr.sin_addr[3]=RemoteServerIP[3];
servaddr.sin_port=RemoteServerPort;
s=*socket( 0, 0, 0); //本地ip及端口
i=connect((SOCKET * )&s, (struct sockaddr*)&servaddr,0);
return(i);
}
/**************************************************************/
void Delayms(uint8 T)
{
uint16 i;
for(;T>0;T--)
for(i=0;i<5750;i++);
}
/**************************************************
void __irq IRQ_Eint2 (void)
{
int8 i;
i=Rec_Packet();
if(i!=0)
NICREFLAG=i; //缓冲区用的块数
else
NICREFLAG=0;
EXTINT=0X04;
VICVectAddr=0x00; //vector Interrupt finish
}*/
//==========================================================================================================
/*********************************************************/
void __irq Timer0_Handler(void) //5毫秒中断
{
static uint8 t;
T0IR = 0x01;
t++;
LastData.RepeatTimer++; //重发时间计数
ConTimer++;
if(ReTimeroutf==1) //RS232 接受标记
{
ReTimerout++;
if(ReTimerout>=5) //15ms<=ReTimerout<=20ms
{
uart0.ReLength=uart0.ReIndex;
uart0.ReIndex=0x00;
uart0.ReFinished=1;
ReTimerout=0;
ReTimeroutf=0;
}
}
if(t>=200)
{
t=0;
Second++;
}
VICVectAddr = 0; // 通知中断控制器中断结束
}
//========================================================================================================
/*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
void __irq IRQ_UART0 (void)
{
uint8 i,j;
while(((j=U0IIR)&0x01)==0)
{
switch(j&0x0e)
{
case 0x02:
if(uart0.SendLength==0x00)
break;
for(i=0;i<14;i++)
{
uart0.SendIndex++;
uart0.SendLength--;
if(uart0.SendLength==0x00)
break;
U0THR=uart0.SendBuf[uart0.SendIndex];
}
break;
case 0x04:
for(i=0;i<14;i++)
{
uart0.ReBuf[uart0.ReIndex]=U0RBR; //读UART0 FIFO 的数据
uart0.ReIndex++;
}
ReTimerout=0; //重新计时,如果15毫秒以后没收到数据就发送
ReTimeroutf=1;
break;
case 0x06:
// i=U0LSR;
break;
case 0x0c:
while((U0LSR&0x01)==0x01)
{
uart0.ReBuf[uart0.ReIndex]=U0RBR;
uart0.ReIndex++;
}
ReTimerout=0; //重新计时
ReTimeroutf=0;
uart0.ReLength=uart0.ReIndex;
uart0.ReIndex=0x00;
uart0.ReFinished=1;
break;
default:
break;
}
}
VICVectAddr = 0x00; // 中断处理结束
}
/*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置工作模式和波特率。
** 入口参数 :baud 波特率
** set 模式设置(UARTMODE数据结构)
** 出口参数 :1-初始化成功, 0-初始化失败
*********************************************************************************************************
*/
uint8 UART0_Init (uint32 baud)
{
uint32 i;
uint32 bak;
i=((baud>>20)&0x0f)*100000;
i+=((baud>>16)&0x0f)*10000;
i+=((baud>>12)&0x0f)*1000;
i+=((baud>>8)&0x0f)*100;
i+=((baud>>4)&0x0f)*10;
i+=(baud&0x0f);
baud=i;
/* 参数过滤 */
if ((baud ==0 ) || (baud > 115200)) return (0);
if ((set.datab <5) || (set.datab > 8)) return (0);
if ((set.stopb == 0) || (set.stopb > 2)) return (0);
if (set.parity > 4) return (0);
/* 设置串口波特率 */
U0LCR = 0x80; // DLAB = 1
bak = (Fpclk >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak & 0xFF;
/* 设置串口模式 */
bak = set.datab - 5; // 设置字长
if (set.stopb == 2) bak |= 0x04; // 判断是否为2位停止位
if (set.parity != 0)
{
set.parity = set.parity - 1;
bak |= 0x08;
}
bak |= set.parity << 4; // 设置奇偶校验
U0LCR = bak;
return (1);
}
/*****************************************/
void WdtFeed (void)
{
IRQDisable();
WDFEED = 0xaa;
WDFEED = 0X55;
IRQEnable();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -