?login_element?

Subversion Repositories NedoOS

Rev

Rev 8 | Blame | Compare with Previous | Last modification | View Log | Download

  1.  
  2. #include "config.h"
  3. #include "ethfunc.h"
  4. #include "RamFunctions.h"
  5. #include "opora.h"
  6.  
  7. const uint16_t MyMAC[3]={0x3412,0x7856,0xBC9A}; //MAC-рфЁхё ъюэЄЁюыыхЁр
  8. /*const*/ uint16_t MyIPAddress[2]={0xA8C0,0x5701}; //IP-рфЁхё: 192.168.1.87
  9.  
  10. _Rec_Frame Frame;
  11. uint32_t Time_old,Time_new,Time_delta;
  12. uint16_t Counter;
  13.  
  14. //typedef struct
  15.   union
  16.   {
  17.     uint8_t    buffer8[1600];
  18.     uint16_t   buffer[800];
  19.     uint32_t   buffer32[400];
  20.   }  outbuf;
  21.  
  22. // uint16_t buffer[800];
  23.  
  24. void Answear_ARP(void);
  25. void PacketAnaliser(void);
  26. uint16_t CheckSum_IP(void);
  27. uint16_t CheckSum_ICMP(uint16_t);
  28. void Answear_ICMP(void);
  29. void Answear_UDP(void);
  30. void Request_ARP(void);
  31. void SysTickInit(void);
  32.  
  33. void /*int*/ main()
  34. {
  35.         ClkConfig();
  36.         EthernetConfig();
  37.         PortConfig();
  38.         SysTickInit(); // шэшЎшрышчрЎш  ёшёЄхьэюую ЄрщьхЁр
  39.  
  40.         WriteDataToRAM(0x60000000,0);
  41.  
  42.         if (TestData(0x60000000,0)) {
  43.                 //PORTD->SETTX=1<<7;      //ЄхёЄ єёях°эю чртхЁ°хэ!
  44.         }else {
  45.                 MyIPAddress[1]=0x5601; //PORTD->SETTX=1<<8;      //ЄхёЄ чртхЁ°шыё  ё ю°шсъющ!
  46.         }
  47. //loop:
  48.         WriteDataToRAM(0x60000000,1);
  49.  
  50.         if(TestData(0x60000000,1)) {
  51.                 //PORTD->SETTX=1<<9;      //ЄхёЄ єёях°эю чртхЁ°хэ!
  52.         }else {
  53.                 MyIPAddress[1]=0x5501; //PORTD->SETTX=1<<10;     //ЄхёЄ чртхЁ°шыё  ё ю°шсъющ!
  54.         }
  55.  //goto loop;
  56.         NVIC_EnableIRQ(ETHERNET_IRQn);
  57.         while(1)
  58.         {
  59.                 if((ETHERNET->PHY_STATUS&0x02)==0x00)   PORTB->SETTX=1<<15;             //юЄюсЁрцхэшх ёшуэрыр LINK
  60.                 else                                                                    PORTB->CLRTX=1<<15;
  61.  
  62.                 if((ETHERNET->PHY_STATUS&0x08)==0x00)   PORTB->SETTX=1<<14;             //Full Duplex Mode
  63.                 else                                                                    PORTB->CLRTX=1<<14;
  64.         }
  65.                 //Time_old=0x00FFFFFF;
  66. }
  67.  
  68. void ETHERNET_Handler()
  69. {
  70.         uint16_t Status;
  71.  
  72.         Status=ETHERNET->IFR;
  73.         ETHERNET->IFR=Status;
  74.         Status&=0x101;
  75.         PORTD->RXTX^=(1<<9);
  76.         if((Status&0x01)==0x01)
  77.         {
  78.                 PORTD->SETTX=1<<7;
  79.                 Counter=ReadPacket(&Frame);
  80.                 PacketAnaliser();
  81.                 PORTD->CLRTX=1<<7;
  82.         }
  83. }
  84.  
  85. //*** ╘єэъЎш  ЁрчсюЁр яюыєўхээюую яръхЄр
  86. void PacketAnaliser(void)
  87. {
  88.         switch(Frame.Data[6])  //юяЁхфхы хь Єшя ёыхфє■∙хую яЁюЄюъюыр
  89.     {
  90.         case 0x0008:       //яЁюЄюъюы IP
  91.                 if((Frame.Data[15]==MyIPAddress[0])&&(Frame.Data[16]==MyIPAddress[1]))  //ёЁртэштрхь IP рфЁхёр т яръхЄх ё эр°шь
  92.             {                                                                                 //хёыш юэш ёютярфр■Є, Єю чрэшьрхьё  ЁрчсюЁюь яръхЄр фры№°х,
  93.                 if(CheckSum_IP()==Frame.Data[12])   //хёыш ъюэЄЁюы№э√х ёєьь√ яръхЄр ш т√ўшёыхээр  ёютярфр■Є, яЁюфюыцрхь
  94.                 {                                                           //шэрўх - юЄсЁрё√трхь яръхЄ
  95.                                         //--------------------UDP-------------------
  96.                         if((Frame.Data[11]&0xFF00)==0x1100)     //юяЁхфхышыш ёыхфє■∙шщ яЁюЄюъюы: UDP
  97.                     {
  98.                                                         PORTD->SETTX=1<<8;
  99.                                 Answear_UDP();       //юЄяЁртшыш юЄтхЄ эр чряЁюё Echo (ping) request
  100.                                                         PORTD->CLRTX=1<<8;
  101.                     }
  102.                                         //--------------------ICMP-------------------
  103.                         if((Frame.Data[11]&0xFF00)==0x0100)     //юяЁхфхышыш ёыхфє■∙шщ яЁюЄюъюы: ICMP
  104.                     {
  105.                         if(Frame.Data[17]==0x0008)        //юяЁхфхышыш Єшя - Echo (ping) request
  106.                                                 {
  107.                                                         PORTD->SETTX=1<<8;
  108.                                 Answear_ICMP();       //юЄяЁртшыш юЄтхЄ эр чряЁюё Echo (ping) request
  109.                                                         PORTD->CLRTX=1<<8;
  110.                                                 }
  111.                     }
  112.                 }
  113.                 //-------------------------------------------
  114.             }
  115.             break;
  116.                 case 0x0608:      //яЁюЄюъюы ARP
  117.                 if((Frame.Data[19]==MyIPAddress[0])&&(Frame.Data[20]==MyIPAddress[1]))  //ёЁртэштрхь IP рфЁхёр т яръхЄх ё эр°шь
  118.             {                                                                                 //хёыш юэш ёютярфр■Є, Єю чрэшьрхьё  ЁрчсюЁюь яръхЄр фры№°х,
  119.                 Answear_ARP();  //юЄяЁртшыш юЄтхЄ эр ARP-чряЁюё
  120.             }
  121.             break;
  122.         }
  123. }
  124.  
  125. //*** ╘єэъЎш  ЇюЁьшЁютрэш  юЄтхЄр эр ARP-чряЁюё
  126. void Answear_ARP(void)
  127. {
  128.         uint16_t Buf[22];
  129.         Buf[0]=Frame.Data[3];           //MAC-рфЁхё шёЄюўэшър
  130.         Buf[1]=Frame.Data[4];           //MAC-рфЁхё шёЄюўэшър
  131.         Buf[2]=Frame.Data[5];           //MAC-рфЁхё шёЄюўэшър
  132.         Buf[3]=ETHERNET->MAC_T;         //эр° MAC-рфЁхё
  133.         Buf[4]=ETHERNET->MAC_M;         //эр° MAC-рфЁхё
  134.         Buf[5]=ETHERNET->MAC_H;         //эр° MAC-рфЁхё
  135.         Buf[6]=Frame.Data[6];           //type - ARP
  136.         Buf[7]=Frame.Data[7];           //Hardware type - Ethernet
  137.         Buf[8]=Frame.Data[8];           //Protocol type - IP
  138.         Buf[9]=Frame.Data[9];           //Hardware size - 6; Protocol size - 4
  139.         Buf[10]=0x0200;                 //ъюф юЄтхЄр эр чряЁюё Who has...
  140.         Buf[11]=ETHERNET->MAC_T;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
  141.         Buf[12]=ETHERNET->MAC_M;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
  142.         Buf[13]=ETHERNET->MAC_H;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
  143.         Buf[14]=MyIPAddress[0];                 //My_IP_Address[0];    //Sender IP-address: 192.168.1.87
  144.         Buf[15]=MyIPAddress[1];                 //My_IP_Address[1];    //Sender IP-address: 192.168.1.87
  145.         Buf[16]=Frame.Data[3];          //Target MAC-address
  146.         Buf[17]=Frame.Data[4];          //Target MAC-address
  147.         Buf[18]=Frame.Data[5];          //Target MAC-address
  148.         Buf[19]=Frame.Data[14];         //Target IP-address
  149.         Buf[20]=Frame.Data[15];         //Target IP-address
  150.         Buf[21]=0;
  151.  
  152.         SendPacket(Buf,42);
  153. }
  154.  
  155. //*** ╘єэъЎш  фы  яюфёўхЄр ъюэЄЁюы№эющ ёєьь√ яръхЄр IP-яЁюЄюъюыр
  156. uint16_t CheckSum_IP(void)
  157. {
  158.         unsigned long cs=0;
  159.         cs = cs + Frame.Data[7];
  160.         cs = cs + Frame.Data[8];
  161.         cs = cs + Frame.Data[9];
  162.         cs = cs + Frame.Data[10];
  163.         cs = cs + Frame.Data[11];
  164.         cs = cs + Frame.Data[13];
  165.         cs = cs + Frame.Data[14];
  166.         cs = cs + Frame.Data[15];
  167.         cs = cs + Frame.Data[16];
  168.         cs = (cs >> 16) + (cs & 0xFFFF);
  169.         return (uint16_t)(~cs);
  170. }
  171.  
  172. //*** ╘єэъЎш  фы  яюфёўхЄр ъюэЄЁюы№эющ ёєьь√ яръхЄр ICMP-яЁюЄюъюыр
  173. //*** size - ъюы-тю ёыют, яю ъюЄюЁюьє эхюсїюфшью яюёўшЄрЄ№ ъюэЄЁюы№эє■ ёєььє
  174. uint16_t CheckSum_ICMP(uint16_t size)
  175. {
  176.         unsigned long a, cs=0;
  177.         for(a=0;a<size;a++)
  178.         {
  179.                 if(a==1) continue;
  180.                 else cs+=Frame.Data[a+17];
  181.         }
  182.         cs=(cs>>16)+(cs&0xFFFF);
  183.         return (uint16_t)(~cs);
  184. }
  185.  
  186. //*** ╘єэъЎш  фы  ЇюЁьшЁютрэш  юЄтхЄр эр чряЁюё ICMP
  187. void Answear_ICMP(void)
  188. {
  189.     unsigned long a;
  190.         uint16_t buffer[288];
  191.         uint16_t tmp;
  192.  
  193.         //╩юы-тю срщЄ т ICMP-яръхЄх
  194.         tmp=Counter-34-4; //34 срщЄр - чруюыютюъ Eth2 ш IP яръхЄют, 4 срщЄр - ъюэЄЁюы№эр  ёєььр Eth2 яръхЄр.
  195.         if((tmp&0x01)==1)
  196.         {
  197.                 tmp=(tmp+1)>>1; //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют
  198.                 Frame.Data[tmp+16]=Frame.Data[tmp+16]&0x00FF;
  199.         }
  200.         else                            tmp=tmp>>1;             //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют
  201.  
  202.         //-------Ethernet 2 Protocol---------
  203.     buffer[0]=Frame.Data[3];
  204.     buffer[1]=Frame.Data[4];
  205.     buffer[2]=Frame.Data[5];
  206.  
  207.         buffer[3]=ETHERNET->MAC_T;
  208.         buffer[4]=ETHERNET->MAC_M;
  209.         buffer[5]=ETHERNET->MAC_H;
  210.  
  211.         buffer[6]=Frame.Data[6];
  212.     //-------IP Protocol---------
  213.     for(a=7;a<12;a++)
  214.         {
  215.             buffer[a]= Frame.Data[a];
  216.     }
  217.     //---------------------------
  218.     buffer[12]=CheckSum_IP();
  219.         buffer[13]=Frame.Data[15];//IP->DestinAddr[0];
  220.         buffer[14]=Frame.Data[16];//IP->DestinAddr[1];
  221.         buffer[15]=Frame.Data[13];//IP->SourceAddr[0];
  222.         buffer[16]=Frame.Data[14];//IP->SourceAddr[1];
  223.         //-------ICMP Protocol---------
  224.         buffer[17]=0x0000; //юЄтхЄ
  225.     Frame.Data[17]=0x0000;
  226.         //-----------------------------
  227.         buffer[18]=CheckSum_ICMP(tmp);
  228.     for(a=19;a<((tmp-2)+19);a++)
  229.         {
  230.         buffer[a]=Frame.Data[a];
  231.         }
  232.         SendPacket(buffer,(tmp*2+34));
  233. }
  234.  
  235. /*
  236.    ╧ръхЄ ъюьрэф√
  237.    *************
  238. ................................. MAC чруюыютюъ
  239. срщЄ 1  - MAC рфЁхё яюыєўрЄхы  (ьшъЁюъюэЄЁюыыхЁ) ёЄ.срщЄ
  240. срщЄ 2  -   -"-                              ёЁ.срщЄ
  241. срщЄ 3  -   -"-                              ёЁ.срщЄ
  242. срщЄ 4  -   -"-                              ёЁ.срщЄ
  243. срщЄ 5  -   -"-                              ёЁ.срщЄ
  244. срщЄ 6  -   -"-                              ьы.срщЄ
  245. срщЄ 7  - MAC рфЁхё юЄяЁртшЄхы  (╧▌┬╠)       ёЄ.срщЄ
  246. срщЄ 8  -   -"-                              ёЁ.срщЄ
  247. срщЄ 9  -   -"-                              ёЁ.срщЄ
  248. срщЄ 10 -   -"-                              ёЁ.срщЄ
  249. срщЄ 11 -   -"-                              ёЁ.срщЄ
  250. срщЄ 12 -   -"-                              ьы.срщЄ
  251. срщЄ 13 - яЁюЄюъюы IP  (800h)                ёЄ.срщЄ
  252. срщЄ 14 -   -"-                              ьы.срщЄ
  253. ................................. IP чруюыютюъ
  254. срщЄ 15 - тхЁёш  4, фышэр чруюыютър 5 ёыют  (45h)
  255. срщЄ 16 - Єшя ёыєцс√  (0)
  256. срщЄ 17 - юс∙р  фышэр т срщЄрї               ёЄ.срщЄ
  257. срщЄ 18 -   -"-                              ьы.срщЄ
  258. срщЄ 19 - шфхэЄшЇшърЄюЁ                      ёЄ.срщЄ
  259. срщЄ 20 -   -"-                              ьы.срщЄ
  260. срщЄ 21 - Їыруш (0)
  261. срщЄ 22 - ёьх∙хэшх ЇЁруьхэЄр (0)
  262. срщЄ 23 - ёЁюъ цшчэш
  263. срщЄ 24 - яЁюЄюъюы UDP  (11h)
  264. срщЄ 25 - ъюэЄЁюы№эр  ёєььр IP чруюыютър     ёЄ.срщЄ
  265. срщЄ 26 -   -"-                              ьы.срщЄ
  266. срщЄ 27 - IP рфЁхё юЄяЁртшЄхы                ёЄ.срщЄ
  267. срщЄ 28 -   -"-                              ёЁ.срщЄ
  268. срщЄ 29 -   -"-                              ёЁ.срщЄ
  269. срщЄ 30 -   -"-                              ьы.срщЄ
  270. срщЄ 31 - IP рфЁхё яюыєўрЄхы                 ёЄ.срщЄ
  271. срщЄ 32 -   -"-                              ёЁ.срщЄ
  272. срщЄ 33 -   -"-                              ёЁ.срщЄ
  273. срщЄ 34 -   -"-                              ьы.срщЄ
  274. ................................. UDP чруюыютюъ
  275. срщЄ 35 - яюЁЄ юЄяЁртшЄхы                    ёЄ.срщЄ
  276. срщЄ 36 -   -"-                              ьы.срщЄ
  277. срщЄ 37 - яюЁЄ яюыєўрЄхы                     ёЄ.срщЄ
  278. срщЄ 38 -   -"-                              ьы.срщЄ
  279. срщЄ 39 - фышэр фхщЄруЁрьь√ UDP              ёЄ.срщЄ
  280. срщЄ 40 -   -"-                              ьы.срщЄ
  281. срщЄ 41 - ъюэЄЁюы№эр  ёєььр                  ёЄ.срщЄ
  282. срщЄ 42 -   -"-                              ьы.срщЄ
  283. ................................. чруюыютюъ ъюьрэф√
  284. срщЄ 43 - эюьхЁ Ўшъыр                        ёЄ.срщЄ
  285. срщЄ 44 -   -"-                              ьы.срщЄ
  286. срщЄ 45 - фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш  (фт.ёыют)
  287.              0 - сєЇхЁ эх т√фр╕Єё 
  288. срщЄ 46 - ъюф юяхЁрЎшш ъюьрэф√
  289. ................................. фрээ√х ъюьрэф√
  290.    ...
  291. ...................................................
  292. срщЄ N-(N+3) - ъюэЄЁюы№эр  ёєььр MAC яръхЄр
  293. */
  294. /*
  295. int writetoarm(unsigned int addr,byte* mas,int bytes_in_line)
  296. {
  297. int i;
  298. byte msg[300];
  299.  cycle++;
  300.         msg[0]=cycle>>8;
  301.         msg[1]=cycle;
  302.         msg[2]=0; //фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш 
  303.         msg[3]=0x04;
  304.         msg[4]=bytes_in_line>>8;//0x00;
  305.         msg[5]=bytes_in_line;//0x01;
  306.         msg[6]=addr>>24;
  307.         msg[7]=addr>>16;
  308.         msg[8]=addr>>8;
  309.         msg[9]=addr;
  310. for(i=0;i<bytes_in_line;i++) {
  311.         msg[10+i]=mas[i];
  312. };
  313.         call_dunin(msg,10+bytes_in_line);
  314.         read_dunin(msg,10);
  315.         addr++;
  316. return(0);
  317. }
  318. */
  319. /*
  320. 2.1.1. ╟руЁєчшЄ№ ьрёёшт т ╟╙ яю срщЄрь
  321. ......................................
  322.     срщЄ46 - 004h
  323.     срщЄ47-48 - ъюышўхёЄтю срщЄ (ёхЄхтющ яюЁ фюъ срщЄ)
  324.     срщЄ49-52 - рфЁхё (ёхЄхтющ яюЁ фюъ срщЄ)
  325.     срщЄ53    - ьы.срщЄ ьрёёштр
  326.     ...
  327.     срщЄN     - ёЄ.срщЄ ьрёёштр
  328. ─рээ√х юЄтхЄэюую ёююс∙хэш :
  329.               - юЄёєЄёЄтє■Є
  330. ╤ чрфрээюую рфЁхёр ╟╙ чруЁєцрхЄё  чрфрээюх
  331. ъюышўхёЄтю срщЄ.
  332. */
  333. /*
  334. ┬√яюыэшЄ№ яЁюуЁрььє яю чрфрээюьє рфЁхёє
  335.     срщЄ46 - 0f0h
  336.     срщЄ47-50 - рфЁхё (ёхЄхтющ яюЁ фюъ срщЄ)
  337. ─рээ√х юЄтхЄэюую ёююс∙хэш :
  338.               - юЄёєЄёЄтє■Є
  339. чряєёърхЄё  яЁюуЁрььр ё чрфрээ√ь рфЁхёюь, чрЄхь т√фр╕Єё  юЄтхЄэюх ёююс∙хэшх
  340. */
  341. //эєьхЁрЎш  ё 1, Є.х. эрфю т√ўшЄрЄ№ 1
  342.  
  343. //*** ╘єэъЎш  фы  ЇюЁьшЁютрэш  юЄтхЄр эр чряЁюё UDP
  344. void Answear_UDP(void)
  345. {
  346. unsigned long a,b, cs=0;
  347. uint16_t tmp;
  348. int i, n;
  349. unsigned char * framebytes = (unsigned char *)Frame.Data;
  350. uint32_t addr;
  351.  
  352.         if (framebytes[45]==0x04) {
  353.                 n = (framebytes[46]<<8) + framebytes[47];
  354.                 addr = (framebytes[48]<<24) + (framebytes[49]<<16) + (framebytes[50]<<8) + framebytes[51];
  355.                 for(i=0; i<n; i++) {
  356.                         WriteByteToRAM(addr+i, framebytes[52+i]);
  357.                 };
  358.         };
  359.         if (framebytes[45]==0xf0) {
  360.                 //addr = 0x50000000;
  361.                 //addr = 0x20002000;
  362.                 addr = (framebytes[46]<<24) + (framebytes[47]<<16) + (framebytes[48]<<8) + framebytes[49];
  363.                 CallRAM(addr);
  364.         };
  365.  
  366. //                uint32_t *buf32, *buf321;
  367.                 Time_new=SysTick->VAL&0x00FFFFFF; // ўЄхэшх Єхъє∙хую ёшёЄхьэюую тЁхьхэш
  368.                 if((SysTick->CTRL&0x10000)==0x10000)
  369.                 {
  370.                         Time_delta=(0x00FFFFFF+Time_old-Time_new);
  371.                 }
  372.                 else
  373.                 {
  374.                         Time_delta=(Time_old-Time_new);
  375.                 };
  376.                 outbuf.buffer[21]=(uint16_t)((Time_delta&0xFFFF0000)>>16); // яхЁшюф юсьхэр т ЄръЄрї - ёЄрЁ°шх срщЄ√
  377.                 outbuf.buffer[22]=(uint16_t)(Time_delta&0x0000FFFF); // яхЁшюф юсьхэр т ЄръЄрї - ьырф°шх срщЄ√
  378.                 Time_old=Time_new;
  379.         //╩юы-тю срщЄ т ICMP-яръхЄх
  380.         tmp=Counter-34-4; //34 срщЄр - чруюыютюъ Eth2 ш IP яръхЄют, 4 срщЄр - ъюэЄЁюы№эр  ёєььр Eth2 яръхЄр.
  381.         if((tmp&0x01)==1) // хёыш эхў╕Єэюх ъюы-тю срщЄ
  382.         {
  383.                 tmp=(tmp+1)>>1; //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют т UDP-яръхЄх
  384.                 Frame.Data[tmp+16]=Frame.Data[tmp+16]&0x00FF; // юсЁхчрхь эряюыютшэє ёыютю ёюфхЁцр∙хх яюёыхфэшщ срщЄ
  385.         }
  386.         else                            tmp=tmp>>1;             //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют т UDP-яръхЄх
  387.  
  388.         //-------Ethernet 2 Protocol---------
  389.         outbuf.buffer[0]=Frame.Data[3];
  390.         outbuf.buffer[1]=Frame.Data[4];
  391.         outbuf.buffer[2]=Frame.Data[5];
  392.  
  393.         outbuf.buffer[3]=ETHERNET->MAC_T;
  394.         outbuf.buffer[4]=ETHERNET->MAC_M;
  395.         outbuf.buffer[5]=ETHERNET->MAC_H;
  396.  
  397.         outbuf.buffer[6]=Frame.Data[6];
  398.     //-------IP Protocol---------
  399.         outbuf.buffer[7]=Frame.Data[7];
  400.         outbuf.buffer[8]=Frame.Data[8];
  401.         outbuf.buffer[9]=Frame.Data[9];
  402.         outbuf.buffer[10]=Frame.Data[10];
  403.         outbuf.buffer[11]=Frame.Data[11];
  404.         outbuf.buffer[13]=Frame.Data[15];//IP->DestinAddr[0];
  405.         outbuf.buffer[14]=Frame.Data[16];//IP->DestinAddr[1];
  406.         outbuf.buffer[15]=Frame.Data[13];//IP->SourceAddr[0];
  407.         outbuf.buffer[16]=Frame.Data[14];//IP->SourceAddr[1];
  408.     //-----------╧юфёўхЄ ъюэЄЁюы№эющ ёєьь√ яръхЄр IP-яЁюЄюъюыр----------------
  409.                 cs = cs + outbuf.buffer[7];
  410.                 cs = cs + outbuf.buffer[8];
  411.                 cs = cs + outbuf.buffer[9];
  412.                 cs = cs + outbuf.buffer[10];
  413.                 cs = cs + outbuf.buffer[11];
  414.                 cs = cs + outbuf.buffer[13];
  415.                 cs = cs + outbuf.buffer[14];
  416.                 cs = cs + outbuf.buffer[15];
  417.                 cs = cs + outbuf.buffer[16];
  418.         cs = (cs >> 16) + (cs & 0xFFFF);
  419.         outbuf.buffer[12]=(uint16_t)(~cs);
  420. //              outbuf.buffer[12]=CheckSum_IP();
  421.         //-------UDP Protocol---------
  422.         outbuf.buffer[17]=Frame.Data[18];//╧юЁЄ юЄяЁртшЄхы 
  423.         outbuf.buffer[18]=Frame.Data[17];//╧юЁЄ яюыєўрЄхы 
  424.         outbuf.buffer[19]=Frame.Data[19];//─ышээр UDP
  425.         outbuf.buffer[20]=0x0000; // ъюэЄЁюы№эр  ёєььр
  426.         //-----------------------------
  427.         // outbuf.buffer[18]=CheckSum_ICMP(tmp);
  428.                 tmp=tmp+17; // ёєььрЁэр  фышэр т ёыютрї
  429. //                buf321=(uint32_t*)(Frame.Data[25]);
  430. //                buf32=(uint32_t*)(outbuf.buffer[25]);
  431.         outbuf.buffer[25]=Frame.Data[25];
  432.                 b=tmp/2;
  433.     for(a=13;a<b;a++) // яхЁхяшёрЄ№ тёх фрээ√х
  434.         {
  435.         outbuf.buffer32[a]=Frame.Data32[a];
  436.         a++;
  437.         outbuf.buffer32[a]=Frame.Data32[a];
  438.         a++;
  439.         outbuf.buffer32[a]=Frame.Data32[a];
  440.         a++;
  441.         outbuf.buffer32[a]=Frame.Data32[a];
  442.         };
  443. //         /*{
  444. //        buf321=(uint32_t*)(Frame.Data[a]);
  445. //       buf32=(uint32_t*)(outbuf.buffer[a]);
  446. //        *(buf32)=(uint32_t)a;//*(buf321);
  447. //        a++;
  448. //        *(buf32++)=*(buf321++);
  449. //        a++;
  450. //        *(buf32++)=*(buf321++);
  451. //        a++;
  452. //        *(buf32++)=*(buf321++);
  453. //        }
  454. //      for(a=25;a<tmp;a++)
  455. //        {
  456. //        outbuf.buffer[a]=Frame.Data[a];
  457. //        a++;
  458. //        outbuf.buffer[a]=Frame.Data[a];
  459. //        a++;
  460. //        outbuf.buffer[a]=Frame.Data[a];
  461. //        a++;
  462. //        outbuf.buffer[a]=Frame.Data[a];
  463. //        }  */
  464.                 Time_new=SysTick->VAL&0x00FFFFFF; // ўЄхэшх Єхъє∙хую ёшёЄхьэюую тЁхьхэш
  465.                 if((SysTick->CTRL&0x10000)==0x10000)
  466.                 {
  467.                         Time_delta=(0x00FFFFFF+Time_old-Time_new);
  468.                 }
  469.                 else
  470.                 {
  471.                         Time_delta=(Time_old-Time_new);
  472.                 };
  473.                 outbuf.buffer[23]=(uint16_t)((Time_delta&0xFFFF0000)>>16); // ъюы-тю ЄръЄют, чрЄЁрўхээ√ї эр т√ўшёыхэш  - ёЄрЁ°шх срщЄ√
  474.                 outbuf.buffer[24]=(uint16_t)(Time_delta&0x0000FFFF); // ъюы-тю ЄръЄют, чрЄЁрўхээ√ї эр т√ўшёыхэш  - ьырф°шх срщЄ√
  475.         SendPacket(outbuf.buffer,(tmp*2));
  476. }
  477.  
  478. //--- System Timer initialization ---
  479. void SysTickInit() // шэшЎшрышчрЎш  ёшёЄхьэюую ЄрщьхЁр
  480. {
  481.         SysTick->LOAD = 0x00FFFFFF;     //Pause 177 ms (HCLK = 96MHz)
  482.         SysTick->CTRL = 0x00000001;     //Enabel SysTick
  483. }
  484.