📄 mz4e1ip.c
字号:
#include <stdio.h>
#include <mz4e1ip.h>
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*---------------------------define variable union struct--------------------------*/
unsigned int temp1; /*temp used*/
unsigned int temp2;
unsigned int temp3;
unsigned int temp4;
unsigned int lastsendposition;
unsigned int arpcounter;
unsigned int dogcounter;
unsigned int comtimer;
unsigned int comcounter;
unsigned int comdata[16];
struct data0 /*used by crc */
{
unsigned int wordhigh;
unsigned int wordlow;
};
union crc
{
unsigned long crctotal;
struct data0 devide;
}crccreat;
struct addr0 /*all firm parameter for TCP/IP*/
{
unsigned int myip0;
unsigned int myip1;
unsigned int centerip0;
unsigned int centerip1;
unsigned int mynic0;
unsigned int mynic1;
unsigned int mynic2;
unsigned int centernic0;
unsigned int centernic1;
unsigned int centernic2;
unsigned int ipsequence;
}nicaddr;
struct data1 /*read a bag head into here*/
{
unsigned int statuspointer; /*read out the status and nextpointer,nextpointer must set as receive FIFO start*/
unsigned int receivebaglong; /*the bag count0-count1*/
unsigned int aimnic0;
unsigned int aimnic1;
unsigned int aimnic2;
unsigned int sourcenic0;
unsigned int sourcenic1;
unsigned int sourcenic2;
unsigned int bagtype;
unsigned int udptcp;
unsigned int sourceip0;
unsigned int sourceip1;
unsigned int aimip0;
unsigned int aimip1;
unsigned int ipheadlong;
unsigned int ipbaglong;
unsigned int aimport;
unsigned int sourceport;
unsigned int udpbaglong;
unsigned int alarmused;
unsigned int alarmlong;
unsigned int data0;
unsigned int data1;
unsigned int data2;
unsigned int data3;
unsigned int data4;
unsigned int data5;
}readbaghead;
struct data2
{
unsigned int hardtype;
unsigned int protocoltype;
unsigned int addrlong;
unsigned int operatetype;
}arpbag;
struct data3
{
unsigned int type;
unsigned int sign;
unsigned int sequence;
unsigned int data[32];
}pingbag;
unsigned int *p_imr; /*----------net regist--------*/
unsigned int *p_ifr; /*-----also see main head-----*/
unsigned int *p_greg;
#define dspimr *p_imr
#define dspifr *p_ifr
#define dspgreg *p_greg
ioport unsigned int portffe4; /*-------io regist-------*/
ioport unsigned int portffec;
ioport unsigned int portfff8;
ioport unsigned int portfff9;
ioport unsigned int portfffa;
ioport unsigned int portfffc;
ioport unsigned int portfff4;
ioport unsigned int portfff5;
ioport unsigned int portfff6;
ioport unsigned int portfff7;
#define dsppmst portffe4
#define dspicr portffec
#define dsptcr portfff8
#define dspprd portfff9
#define dsptim portfffa
#define dspwsgr portfffc
#define dspadtr portfff4
#define dspaspcr portfff5
#define dspiosr portfff6
#define dspbrd portfff7
void arpcenter();
void arpin8019();
void arpanswerin8019();
void pinganswerin8019();
void reportipin8019();
void vediobagin8019();
void soundupbagin8019();
void alarmbagin8019();
void delay(unsigned int timen100us);
void delay1us();
void settime(unsigned int n100us);
void endbagread();
void initiale1single();
void dog_wrongcheck();
void comread();
void testend();
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/*-------------------------------main programme---------------------------------------*/
main()
{
/*------------------------dsp initial------------------------*/
asm(" setc intm"); /*close int*/
asm(" clrc cnf");
asm(" setc xf");
p_imr=(unsigned int *)0x0004; /*----------net regist--------*/
p_ifr=(unsigned int *)0x0006;
p_greg=(unsigned int *)0x0005;
dsppmst=0x0004;
dspimr=0x0000;
dspicr=0x0000;
dspwsgr=0x0200; /*io set 1 cycle wait*/
dsptcr=0x0fff;
dspprd=0x0fff;
dsptim=0x0fff;
dspaspcr=0xe000; /*4 io pin set as input--forbit com int*/
dspbrd=0x0082; /*---9600baud----*/
dspifr=0x00ff; /*clr all int sign*/
/*---------------------delay for fpga download end---------------------*/
delay(0x0a00); /* delay 256ms---for FPGA download end---*/
/*----------------------------initial rtl8019-------------------------*/
rtl8019cr=0x0021;
rtl8019imr=0x0000;
rtl8019rcr=0x00c4; /*-----------------accept set*/
rtl8019pstart=0x0050;
rtl8019pstop=0x0080;
rtl8019bnry=0x007f;
rtl8019cr=0x0061; /*page1*/
rtl8019curr=0x0050;
rtl8019cr=0x0021; /*----page0----------transit set*/
rtl8019dcr=0x00f9; /*8 byte fifo - 16 bit*/
rtl8019tcr=0x00e0;
rtl8019tpsr=0x0040;
rtl8019tbcr0=0x0000;
rtl8019tbcr1=0x0000;
rtl8019rsar0=0x0000; /*-------------dma set*/
rtl8019rsar1=0x0040;
rtl8019rbcr0=0x0000;
rtl8019rbcr1=0x0000;
rtl8019isr=0x00ff;
/*----------------------------------------------------------- */
temp1=dsp24c02_8&0x00ff;
temp2=(dsp24c02_9&0x00ff)<<8;
nicaddr.mynic0=(temp1|temp2);
temp1=dsp24c02_10&0x00ff;
temp2=(dsp24c02_11&0x00ff)<<8;
nicaddr.mynic1=(temp1|temp2);
temp1=dsp24c02_12&0x00ff;
temp2=(dsp24c02_13&0x00ff)<<8;
nicaddr.mynic2=(temp1|temp2);
temp1=dsp24c02_4&0x00ff;
temp2=(dsp24c02_5&0x00ff)<<8;
nicaddr.myip0=(temp1|temp2);
temp1=dsp24c02_6&0x00ff;
temp2=(dsp24c02_7&0x00ff)<<8;
nicaddr.myip1=(temp1|temp2);
temp1=dsp24c02_0&0x00ff;
temp2=(dsp24c02_1&0x00ff)<<8;
nicaddr.centerip0=(temp1|temp2);
temp1=dsp24c02_2&0x00ff;
temp2=(dsp24c02_3&0x00ff)<<8;
nicaddr.centerip1=(temp1|temp2);
/*---------------------------------------------------*/
rtl8019cr=0x0061; /*page1*/
rtl8019mar0=0x0000;
rtl8019mar1=0x0000;
rtl8019mar2=0x0000;
rtl8019mar3=0x0000;
rtl8019mar4=0x0000;
rtl8019mar5=0x0000;
rtl8019mar6=0x0000;
rtl8019mar7=0x0000;
rtl8019par0=nicaddr.mynic0&0x00ff;
rtl8019par1=(nicaddr.mynic0&0xff00)>>8;
rtl8019par2=nicaddr.mynic1&0x00ff;
rtl8019par3=(nicaddr.mynic1&0xff00)>>8;
rtl8019par4=nicaddr.mynic2&0x00ff;
rtl8019par5=(nicaddr.mynic2&0xff00)>>8;
nicaddr.ipsequence=0x0001;
nicaddr.centernic0=0xffff;
nicaddr.centernic1=0xffff;
nicaddr.centernic2=0xffff;
readbaghead.statuspointer=0x0050;
lastsendposition=0x0001;
/*-----------------------E1 iniyial----------------------------------*/
initiale1single();
/*---------------------initial for first work-----------------------*/
dogcounter=0x0000;
comcounter=0x0000;
comtimer=0x0000;
arpcounter=0x0000;
/*-------------------prepare for normal work-------------------------*/
arpin8019();
arpcenter();
/*-------------------------------------------------------------------*/
arpcounter=0x0000;
dogcounter=0x0000;
comcounter=0x0000;
comtimer=0x0000;
/*---------------------normal work---normal work---normal work-----------------------*/
while(1)
{
dog_wrongcheck(); /******----------------------dog check----------------******/
comread();
temp1=dspifr&0x0004; /******--------------------send packet----------------******/
if(temp1!=0) /*------set time end------*/
{
temp1=rtl8019isr;
if((temp1&0x0008)!=0)
{
rtl8019cr=0x0026; /*error send out----------send again*/
settime(0x0006);
}
else if((temp1&0x0002)!=0) /*send out correct---------if have new data*/
{
temp1=dspiosr;
if((temp1&0x0008)==0x0000)
{
arpin8019();
dsparpsend=0x4444; /*---send a arp wr fpga---*/
}
else if((temp1&0x0001)==0x0000)
{
alarmbagin8019();
}
else if((temp1&0x0002)==0x0000)
{
vediobagin8019();
}
else if((temp1&0x0004)==0x0000)
{
soundupbagin8019();
}
}
} /******--------------------send packet----------------******/
rtl8019cr=0x0062; /******-----------------deal with accept packet-------******/
temp4=rtl8019curr&0x00ff;
rtl8019cr=0x0022;
if(temp4!=readbaghead.statuspointer) /*have data packet accept*/
{
rtl8019rsar0=0x0000;
rtl8019rsar1=readbaghead.statuspointer;
rtl8019rbcr0=0x0040; /* pre set DMA length as 1600*/
rtl8019rbcr1=0x0006;
rtl8019cr=0x000a;
temp3=rtl8019dma;
if((temp3&0x0001)==1) /*****--------------receive bag no error-------------*****/
{
temp3=(temp3&0xff00)>>8;
if((temp3!=readbaghead.statuspointer)&&(temp3<=0x007f)&&(temp3>=0x0050)) /****---------------next bag pointer right-----------****/
{
/*-------------------------------------------*/
dspbagaccept=0x5555;
/*-------------------------------------------*/
readbaghead.statuspointer=temp3;
readbaghead.receivebaglong=rtl8019dma;
readbaghead.sourcenic0=rtl8019dma;
readbaghead.sourcenic1=rtl8019dma;
readbaghead.sourcenic2=rtl8019dma;
readbaghead.aimnic0=rtl8019dma;
readbaghead.aimnic1=rtl8019dma;
readbaghead.aimnic2=rtl8019dma;
readbaghead.bagtype=rtl8019dma;
if(readbaghead.bagtype==0x0608) /***---------------------arp bag-------------***/
{
arpbag.hardtype=rtl8019dma;
arpbag.protocoltype=rtl8019dma;
arpbag.addrlong=rtl8019dma;
arpbag.operatetype=rtl8019dma;
if(arpbag.operatetype==0x0100) /*is arp ask*/
{
readbaghead.aimnic0=rtl8019dma;
readbaghead.aimnic1=rtl8019dma;
readbaghead.aimnic2=rtl8019dma;
readbaghead.aimip0=rtl8019dma;
readbaghead.aimip1=rtl8019dma;
readbaghead.sourcenic0=rtl8019dma;
readbaghead.sourcenic1=rtl8019dma;
readbaghead.sourcenic2=rtl8019dma;
readbaghead.sourceip0=rtl8019dma;
readbaghead.sourceip1=rtl8019dma;
endbagread();
if((readbaghead.sourceip0==nicaddr.myip0)&&(readbaghead.sourceip1==nicaddr.myip1))
{
testend();
arpanswerin8019();
if((readbaghead.aimip0==nicaddr.centerip0)&&(readbaghead.aimip1==nicaddr.centerip1))
{
nicaddr.centernic0=readbaghead.aimnic0;
nicaddr.centernic1=readbaghead.aimnic1;
nicaddr.centernic2=readbaghead.aimnic2;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -