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

📄 mz4e1ip.c

📁 用TMS320F206实现图像等高速上网传输功能
💻 C
📖 第 1 页 / 共 5 页
字号:
 
  #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 + -