#include "config.h"
 
#include "ethfunc.h"
 
#include "RamFunctions.h"
 
#include "opora.h"
 
 
 
const uint16_t MyMAC[3]={0x3412,0x7856,0xBC9A}; //MAC-рфЁхё ъюэЄЁюыыхЁр
 
/*const*/ uint16_t MyIPAddress[2]={0xA8C0,0x5701}; //IP-рфЁхё: 192.168.1.87
 
 
 
_Rec_Frame Frame;
 
uint32_t Time_old,Time_new,Time_delta;
 
uint16_t Counter;
 
 
 
//typedef struct
 
  union
 
  {
 
    uint8_t    buffer8[1600];
 
    uint16_t   buffer[800];
 
    uint32_t   buffer32[400];
 
  }  outbuf;
 
 
 
// uint16_t buffer[800];
 
 
 
void Answear_ARP(void);
 
void PacketAnaliser(void);
 
uint16_t CheckSum_IP(void);
 
uint16_t CheckSum_ICMP(uint16_t);
 
void Answear_ICMP(void);
 
void Answear_UDP(void);
 
void Request_ARP(void);
 
void SysTickInit(void);
 
 
 
void /*int*/ main()
 
{
 
        ClkConfig();
 
        EthernetConfig();
 
        PortConfig();
 
        SysTickInit(); // шэшЎшрышчрЎш  ёшёЄхьэюую ЄрщьхЁр
 
 
 
        WriteDataToRAM(0x60000000,0);
 
 
 
        if (TestData(0x60000000,0)) {
 
                //PORTD->SETTX=1<<7;      //ЄхёЄ єёях°эю чртхЁ°хэ!
 
        }else {
 
                MyIPAddress[1]=0x5601; //PORTD->SETTX=1<<8;      //ЄхёЄ чртхЁ°шыё  ё ю°шсъющ!
 
        }
 
//loop:
 
        WriteDataToRAM(0x60000000,1);
 
 
 
        if(TestData(0x60000000,1)) {
 
                //PORTD->SETTX=1<<9;      //ЄхёЄ єёях°эю чртхЁ°хэ!
 
        }else {
 
                MyIPAddress[1]=0x5501; //PORTD->SETTX=1<<10;     //ЄхёЄ чртхЁ°шыё  ё ю°шсъющ!
 
        }
 
 //goto loop;
 
        NVIC_EnableIRQ(ETHERNET_IRQn);
 
        while(1)
 
        {
 
                if((ETHERNET->PHY_STATUS&0x02)==0x00)   PORTB->SETTX=1<<15;             //юЄюсЁрцхэшх ёшуэрыр LINK
 
                else                                                                    PORTB->CLRTX=1<<15;
 
 
 
                if((ETHERNET->PHY_STATUS&0x08)==0x00)   PORTB->SETTX=1<<14;             //Full Duplex Mode
 
                else                                                                    PORTB->CLRTX=1<<14;
 
        }
 
                //Time_old=0x00FFFFFF;
 
}
 
 
 
void ETHERNET_Handler()
 
{
 
        uint16_t Status;
 
 
 
        Status=ETHERNET->IFR;
 
        ETHERNET->IFR=Status;
 
        Status&=0x101;
 
        PORTD->RXTX^=(1<<9);
 
        if((Status&0x01)==0x01)
 
        {
 
                PORTD->SETTX=1<<7;
 
                Counter=ReadPacket(&Frame);
 
                PacketAnaliser();
 
                PORTD->CLRTX=1<<7;
 
        }
 
}
 
 
 
//*** ╘єэъЎш  ЁрчсюЁр яюыєўхээюую яръхЄр
 
void PacketAnaliser(void)
 
{
 
        switch(Frame.Data[6])  //юяЁхфхы хь Єшя ёыхфє■∙хую яЁюЄюъюыр
 
    {
 
        case 0x0008:       //яЁюЄюъюы IP
 
                if((Frame.Data[15]==MyIPAddress[0])&&(Frame.Data[16]==MyIPAddress[1]))  //ёЁртэштрхь IP рфЁхёр т яръхЄх ё эр°шь
 
            {                                                                                 //хёыш юэш ёютярфр■Є, Єю чрэшьрхьё  ЁрчсюЁюь яръхЄр фры№°х,
 
                if(CheckSum_IP()==Frame.Data[12])   //хёыш ъюэЄЁюы№э√х ёєьь√ яръхЄр ш т√ўшёыхээр  ёютярфр■Є, яЁюфюыцрхь
 
                {                                                           //шэрўх - юЄсЁрё√трхь яръхЄ
 
                                        //--------------------UDP-------------------
 
                        if((Frame.Data[11]&0xFF00)==0x1100)     //юяЁхфхышыш ёыхфє■∙шщ яЁюЄюъюы: UDP
 
                    {
 
                                                        PORTD->SETTX=1<<8;
 
                                Answear_UDP();       //юЄяЁртшыш юЄтхЄ эр чряЁюё Echo (ping) request
 
                                                        PORTD->CLRTX=1<<8;
 
                    }
 
                                        //--------------------ICMP-------------------
 
                        if((Frame.Data[11]&0xFF00)==0x0100)     //юяЁхфхышыш ёыхфє■∙шщ яЁюЄюъюы: ICMP
 
                    {
 
                        if(Frame.Data[17]==0x0008)        //юяЁхфхышыш Єшя - Echo (ping) request
 
                                                {
 
                                                        PORTD->SETTX=1<<8;
 
                                Answear_ICMP();       //юЄяЁртшыш юЄтхЄ эр чряЁюё Echo (ping) request
 
                                                        PORTD->CLRTX=1<<8;
 
                                                }
 
                    }
 
                }
 
                //-------------------------------------------
 
            }
 
            break;
 
                case 0x0608:      //яЁюЄюъюы ARP
 
                if((Frame.Data[19]==MyIPAddress[0])&&(Frame.Data[20]==MyIPAddress[1]))  //ёЁртэштрхь IP рфЁхёр т яръхЄх ё эр°шь
 
            {                                                                                 //хёыш юэш ёютярфр■Є, Єю чрэшьрхьё  ЁрчсюЁюь яръхЄр фры№°х,
 
                Answear_ARP();  //юЄяЁртшыш юЄтхЄ эр ARP-чряЁюё
 
            }
 
            break;
 
        }
 
}
 
 
 
//*** ╘єэъЎш  ЇюЁьшЁютрэш  юЄтхЄр эр ARP-чряЁюё
 
void Answear_ARP(void)
 
{
 
        uint16_t Buf[22];
 
        Buf[0]=Frame.Data[3];           //MAC-рфЁхё шёЄюўэшър
 
        Buf[1]=Frame.Data[4];           //MAC-рфЁхё шёЄюўэшър
 
        Buf[2]=Frame.Data[5];           //MAC-рфЁхё шёЄюўэшър
 
        Buf[3]=ETHERNET->MAC_T;         //эр° MAC-рфЁхё
 
        Buf[4]=ETHERNET->MAC_M;         //эр° MAC-рфЁхё
 
        Buf[5]=ETHERNET->MAC_H;         //эр° MAC-рфЁхё
 
        Buf[6]=Frame.Data[6];           //type - ARP
 
        Buf[7]=Frame.Data[7];           //Hardware type - Ethernet
 
        Buf[8]=Frame.Data[8];           //Protocol type - IP
 
        Buf[9]=Frame.Data[9];           //Hardware size - 6; Protocol size - 4
 
        Buf[10]=0x0200;                 //ъюф юЄтхЄр эр чряЁюё Who has...
 
        Buf[11]=ETHERNET->MAC_T;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
 
        Buf[12]=ETHERNET->MAC_M;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
 
        Buf[13]=ETHERNET->MAC_H;        //Sender MAC-address: 0A.1B.2C.3D.4E.5F
 
        Buf[14]=MyIPAddress[0];                 //My_IP_Address[0];    //Sender IP-address: 192.168.1.87
 
        Buf[15]=MyIPAddress[1];                 //My_IP_Address[1];    //Sender IP-address: 192.168.1.87
 
        Buf[16]=Frame.Data[3];          //Target MAC-address
 
        Buf[17]=Frame.Data[4];          //Target MAC-address
 
        Buf[18]=Frame.Data[5];          //Target MAC-address
 
        Buf[19]=Frame.Data[14];         //Target IP-address
 
        Buf[20]=Frame.Data[15];         //Target IP-address
 
        Buf[21]=0;
 
 
 
        SendPacket(Buf,42);
 
}
 
 
 
//*** ╘єэъЎш  фы  яюфёўхЄр ъюэЄЁюы№эющ ёєьь√ яръхЄр IP-яЁюЄюъюыр
 
uint16_t CheckSum_IP(void)
 
{
 
        unsigned long cs=0;
 
        cs = cs + Frame.Data[7];
 
        cs = cs + Frame.Data[8];
 
        cs = cs + Frame.Data[9];
 
        cs = cs + Frame.Data[10];
 
        cs = cs + Frame.Data[11];
 
        cs = cs + Frame.Data[13];
 
        cs = cs + Frame.Data[14];
 
        cs = cs + Frame.Data[15];
 
        cs = cs + Frame.Data[16];
 
        cs = (cs >> 16) + (cs & 0xFFFF);
 
        return (uint16_t)(~cs);
 
}
 
 
 
//*** ╘єэъЎш  фы  яюфёўхЄр ъюэЄЁюы№эющ ёєьь√ яръхЄр ICMP-яЁюЄюъюыр
 
//*** size - ъюы-тю ёыют, яю ъюЄюЁюьє эхюсїюфшью яюёўшЄрЄ№ ъюэЄЁюы№эє■ ёєььє
 
uint16_t CheckSum_ICMP(uint16_t size)
 
{
 
        unsigned long a, cs=0;
 
        for(a=0;a<size;a++)
 
        {
 
                if(a==1) continue;
 
                else cs+=Frame.Data[a+17];
 
        }
 
        cs=(cs>>16)+(cs&0xFFFF);
 
        return (uint16_t)(~cs);
 
}
 
 
 
//*** ╘єэъЎш  фы  ЇюЁьшЁютрэш  юЄтхЄр эр чряЁюё ICMP
 
void Answear_ICMP(void)
 
{
 
    unsigned long a;
 
        uint16_t buffer[288];
 
        uint16_t tmp;
 
 
 
        //╩юы-тю срщЄ т ICMP-яръхЄх
 
        tmp=Counter-34-4; //34 срщЄр - чруюыютюъ Eth2 ш IP яръхЄют, 4 срщЄр - ъюэЄЁюы№эр  ёєььр Eth2 яръхЄр.
 
        if((tmp&0x01)==1)
 
        {
 
                tmp=(tmp+1)>>1; //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют
 
                Frame.Data[tmp+16]=Frame.Data[tmp+16]&0x00FF;
 
        }
 
        else                            tmp=tmp>>1;             //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют
 
 
 
        //-------Ethernet 2 Protocol---------
 
    buffer[0]=Frame.Data[3];
 
    buffer[1]=Frame.Data[4];
 
    buffer[2]=Frame.Data[5];
 
 
 
        buffer[3]=ETHERNET->MAC_T;
 
        buffer[4]=ETHERNET->MAC_M;
 
        buffer[5]=ETHERNET->MAC_H;
 
 
 
        buffer[6]=Frame.Data[6];
 
    //-------IP Protocol---------
 
    for(a=7;a<12;a++)
 
        {
 
            buffer[a]= Frame.Data[a];
 
    }
 
    //---------------------------
 
    buffer[12]=CheckSum_IP();
 
        buffer[13]=Frame.Data[15];//IP->DestinAddr[0];
 
        buffer[14]=Frame.Data[16];//IP->DestinAddr[1];
 
        buffer[15]=Frame.Data[13];//IP->SourceAddr[0];
 
        buffer[16]=Frame.Data[14];//IP->SourceAddr[1];
 
        //-------ICMP Protocol---------
 
        buffer[17]=0x0000; //юЄтхЄ
 
    Frame.Data[17]=0x0000;
 
        //-----------------------------
 
        buffer[18]=CheckSum_ICMP(tmp);
 
    for(a=19;a<((tmp-2)+19);a++)
 
        {
 
        buffer[a]=Frame.Data[a];
 
        }
 
        SendPacket(buffer,(tmp*2+34));
 
}
 
 
 
/*
 
   ╧ръхЄ ъюьрэф√
 
   *************
 
................................. MAC чруюыютюъ
 
срщЄ 1  - MAC рфЁхё яюыєўрЄхы  (ьшъЁюъюэЄЁюыыхЁ) ёЄ.срщЄ
 
срщЄ 2  -   -"-                              ёЁ.срщЄ
 
срщЄ 3  -   -"-                              ёЁ.срщЄ
 
срщЄ 4  -   -"-                              ёЁ.срщЄ
 
срщЄ 5  -   -"-                              ёЁ.срщЄ
 
срщЄ 6  -   -"-                              ьы.срщЄ
 
срщЄ 7  - MAC рфЁхё юЄяЁртшЄхы  (╧▌┬╠)       ёЄ.срщЄ
 
срщЄ 8  -   -"-                              ёЁ.срщЄ
 
срщЄ 9  -   -"-                              ёЁ.срщЄ
 
срщЄ 10 -   -"-                              ёЁ.срщЄ
 
срщЄ 11 -   -"-                              ёЁ.срщЄ
 
срщЄ 12 -   -"-                              ьы.срщЄ
 
срщЄ 13 - яЁюЄюъюы IP  (800h)                ёЄ.срщЄ
 
срщЄ 14 -   -"-                              ьы.срщЄ
 
................................. IP чруюыютюъ
 
срщЄ 15 - тхЁёш  4, фышэр чруюыютър 5 ёыют  (45h)
 
срщЄ 16 - Єшя ёыєцс√  (0)
 
срщЄ 17 - юс∙р  фышэр т срщЄрї               ёЄ.срщЄ
 
срщЄ 18 -   -"-                              ьы.срщЄ
 
срщЄ 19 - шфхэЄшЇшърЄюЁ                      ёЄ.срщЄ
 
срщЄ 20 -   -"-                              ьы.срщЄ
 
срщЄ 21 - Їыруш (0)
 
срщЄ 22 - ёьх∙хэшх ЇЁруьхэЄр (0)
 
срщЄ 23 - ёЁюъ цшчэш
 
срщЄ 24 - яЁюЄюъюы UDP  (11h)
 
срщЄ 25 - ъюэЄЁюы№эр  ёєььр IP чруюыютър     ёЄ.срщЄ
 
срщЄ 26 -   -"-                              ьы.срщЄ
 
срщЄ 27 - IP рфЁхё юЄяЁртшЄхы                ёЄ.срщЄ
 
срщЄ 28 -   -"-                              ёЁ.срщЄ
 
срщЄ 29 -   -"-                              ёЁ.срщЄ
 
срщЄ 30 -   -"-                              ьы.срщЄ
 
срщЄ 31 - IP рфЁхё яюыєўрЄхы                 ёЄ.срщЄ
 
срщЄ 32 -   -"-                              ёЁ.срщЄ
 
срщЄ 33 -   -"-                              ёЁ.срщЄ
 
срщЄ 34 -   -"-                              ьы.срщЄ
 
................................. UDP чруюыютюъ
 
срщЄ 35 - яюЁЄ юЄяЁртшЄхы                    ёЄ.срщЄ
 
срщЄ 36 -   -"-                              ьы.срщЄ
 
срщЄ 37 - яюЁЄ яюыєўрЄхы                     ёЄ.срщЄ
 
срщЄ 38 -   -"-                              ьы.срщЄ
 
срщЄ 39 - фышэр фхщЄруЁрьь√ UDP              ёЄ.срщЄ
 
срщЄ 40 -   -"-                              ьы.срщЄ
 
срщЄ 41 - ъюэЄЁюы№эр  ёєььр                  ёЄ.срщЄ
 
срщЄ 42 -   -"-                              ьы.срщЄ
 
................................. чруюыютюъ ъюьрэф√
 
срщЄ 43 - эюьхЁ Ўшъыр                        ёЄ.срщЄ
 
срщЄ 44 -   -"-                              ьы.срщЄ
 
срщЄ 45 - фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш  (фт.ёыют)
 
             0 - сєЇхЁ эх т√фр╕Єё 
 
срщЄ 46 - ъюф юяхЁрЎшш ъюьрэф√
 
................................. фрээ√х ъюьрэф√
 
   ...
 
...................................................
 
срщЄ N-(N+3) - ъюэЄЁюы№эр  ёєььр MAC яръхЄр
 
*/
 
/*
 
int writetoarm(unsigned int addr,byte* mas,int bytes_in_line)
 
{
 
int i;
 
byte msg[300];
 
 cycle++;
 
        msg[0]=cycle>>8;
 
        msg[1]=cycle;
 
        msg[2]=0; //фышэр сєЇхЁр Єхъє∙хую ёюёЄю эш 
 
        msg[3]=0x04;
 
        msg[4]=bytes_in_line>>8;//0x00;
 
        msg[5]=bytes_in_line;//0x01;
 
        msg[6]=addr>>24;
 
        msg[7]=addr>>16;
 
        msg[8]=addr>>8;
 
        msg[9]=addr;
 
for(i=0;i<bytes_in_line;i++) {
 
        msg[10+i]=mas[i];
 
};
 
        call_dunin(msg,10+bytes_in_line);
 
        read_dunin(msg,10);
 
        addr++;
 
return(0);
 
}
 
*/
 
/*
 
2.1.1. ╟руЁєчшЄ№ ьрёёшт т ╟╙ яю срщЄрь
 
......................................
 
    срщЄ46 - 004h
 
    срщЄ47-48 - ъюышўхёЄтю срщЄ (ёхЄхтющ яюЁ фюъ срщЄ)
 
    срщЄ49-52 - рфЁхё (ёхЄхтющ яюЁ фюъ срщЄ)
 
    срщЄ53    - ьы.срщЄ ьрёёштр
 
    ...
 
    срщЄN     - ёЄ.срщЄ ьрёёштр
 
─рээ√х юЄтхЄэюую ёююс∙хэш :
 
              - юЄёєЄёЄтє■Є
 
╤ чрфрээюую рфЁхёр ╟╙ чруЁєцрхЄё  чрфрээюх
 
ъюышўхёЄтю срщЄ.
 
*/
 
/*
 
┬√яюыэшЄ№ яЁюуЁрььє яю чрфрээюьє рфЁхёє
 
    срщЄ46 - 0f0h
 
    срщЄ47-50 - рфЁхё (ёхЄхтющ яюЁ фюъ срщЄ)
 
─рээ√х юЄтхЄэюую ёююс∙хэш :
 
              - юЄёєЄёЄтє■Є
 
чряєёърхЄё  яЁюуЁрььр ё чрфрээ√ь рфЁхёюь, чрЄхь т√фр╕Єё  юЄтхЄэюх ёююс∙хэшх
 
*/
 
//эєьхЁрЎш  ё 1, Є.х. эрфю т√ўшЄрЄ№ 1
 
 
 
//*** ╘єэъЎш  фы  ЇюЁьшЁютрэш  юЄтхЄр эр чряЁюё UDP
 
void Answear_UDP(void)
 
{
 
unsigned long a,b, cs=0;
 
uint16_t tmp;
 
int i, n;
 
unsigned char * framebytes = (unsigned char *)Frame.Data;
 
uint32_t addr;
 
 
 
        if (framebytes[45]==0x04) {
 
                n = (framebytes[46]<<8) + framebytes[47];
 
                addr = (framebytes[48]<<24) + (framebytes[49]<<16) + (framebytes[50]<<8) + framebytes[51];
 
                for(i=0; i<n; i++) {
 
                        WriteByteToRAM(addr+i, framebytes[52+i]);
 
                };
 
        };
 
        if (framebytes[45]==0xf0) {
 
                //addr = 0x50000000;
 
                //addr = 0x20002000;
 
                addr = (framebytes[46]<<24) + (framebytes[47]<<16) + (framebytes[48]<<8) + framebytes[49];
 
                CallRAM(addr);
 
        };
 
 
 
//                uint32_t *buf32, *buf321;
 
                Time_new=SysTick->VAL&0x00FFFFFF; // ўЄхэшх Єхъє∙хую ёшёЄхьэюую тЁхьхэш
 
                if((SysTick->CTRL&0x10000)==0x10000)
 
                {
 
                        Time_delta=(0x00FFFFFF+Time_old-Time_new);
 
                }
 
                else
 
                {
 
                        Time_delta=(Time_old-Time_new);
 
                };
 
                outbuf.buffer[21]=(uint16_t)((Time_delta&0xFFFF0000)>>16); // яхЁшюф юсьхэр т ЄръЄрї - ёЄрЁ°шх срщЄ√
 
                outbuf.buffer[22]=(uint16_t)(Time_delta&0x0000FFFF); // яхЁшюф юсьхэр т ЄръЄрї - ьырф°шх срщЄ√
 
                Time_old=Time_new;
 
        //╩юы-тю срщЄ т ICMP-яръхЄх
 
        tmp=Counter-34-4; //34 срщЄр - чруюыютюъ Eth2 ш IP яръхЄют, 4 срщЄр - ъюэЄЁюы№эр  ёєььр Eth2 яръхЄр.
 
        if((tmp&0x01)==1) // хёыш эхў╕Єэюх ъюы-тю срщЄ
 
        {
 
                tmp=(tmp+1)>>1; //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют т UDP-яръхЄх
 
                Frame.Data[tmp+16]=Frame.Data[tmp+16]&0x00FF; // юсЁхчрхь эряюыютшэє ёыютю ёюфхЁцр∙хх яюёыхфэшщ срщЄ
 
        }
 
        else                            tmp=tmp>>1;             //шч ъюы-тр срщЄ яюыєўшыш ъюы-тю ёыют т UDP-яръхЄх
 
 
 
        //-------Ethernet 2 Protocol---------
 
        outbuf.buffer[0]=Frame.Data[3];
 
        outbuf.buffer[1]=Frame.Data[4];
 
        outbuf.buffer[2]=Frame.Data[5];
 
 
 
        outbuf.buffer[3]=ETHERNET->MAC_T;
 
        outbuf.buffer[4]=ETHERNET->MAC_M;
 
        outbuf.buffer[5]=ETHERNET->MAC_H;
 
 
 
        outbuf.buffer[6]=Frame.Data[6];
 
    //-------IP Protocol---------
 
        outbuf.buffer[7]=Frame.Data[7];
 
        outbuf.buffer[8]=Frame.Data[8];
 
        outbuf.buffer[9]=Frame.Data[9];
 
        outbuf.buffer[10]=Frame.Data[10];
 
        outbuf.buffer[11]=Frame.Data[11];
 
        outbuf.buffer[13]=Frame.Data[15];//IP->DestinAddr[0];
 
        outbuf.buffer[14]=Frame.Data[16];//IP->DestinAddr[1];
 
        outbuf.buffer[15]=Frame.Data[13];//IP->SourceAddr[0];
 
        outbuf.buffer[16]=Frame.Data[14];//IP->SourceAddr[1];
 
    //-----------╧юфёўхЄ ъюэЄЁюы№эющ ёєьь√ яръхЄр IP-яЁюЄюъюыр----------------
 
                cs = cs + outbuf.buffer[7];
 
                cs = cs + outbuf.buffer[8];
 
                cs = cs + outbuf.buffer[9];
 
                cs = cs + outbuf.buffer[10];
 
                cs = cs + outbuf.buffer[11];
 
                cs = cs + outbuf.buffer[13];
 
                cs = cs + outbuf.buffer[14];
 
                cs = cs + outbuf.buffer[15];
 
                cs = cs + outbuf.buffer[16];
 
        cs = (cs >> 16) + (cs & 0xFFFF);
 
        outbuf.buffer[12]=(uint16_t)(~cs);
 
//              outbuf.buffer[12]=CheckSum_IP();
 
        //-------UDP Protocol---------
 
        outbuf.buffer[17]=Frame.Data[18];//╧юЁЄ юЄяЁртшЄхы 
 
        outbuf.buffer[18]=Frame.Data[17];//╧юЁЄ яюыєўрЄхы 
 
        outbuf.buffer[19]=Frame.Data[19];//─ышээр UDP
 
        outbuf.buffer[20]=0x0000; // ъюэЄЁюы№эр  ёєььр
 
        //-----------------------------
 
        // outbuf.buffer[18]=CheckSum_ICMP(tmp);
 
                tmp=tmp+17; // ёєььрЁэр  фышэр т ёыютрї
 
//                buf321=(uint32_t*)(Frame.Data[25]);
 
//                buf32=(uint32_t*)(outbuf.buffer[25]);
 
        outbuf.buffer[25]=Frame.Data[25];
 
                b=tmp/2;
 
    for(a=13;a<b;a++) // яхЁхяшёрЄ№ тёх фрээ√х
 
        {
 
        outbuf.buffer32[a]=Frame.Data32[a];
 
        a++;
 
        outbuf.buffer32[a]=Frame.Data32[a];
 
        a++;
 
        outbuf.buffer32[a]=Frame.Data32[a];
 
        a++;
 
        outbuf.buffer32[a]=Frame.Data32[a];
 
        };
 
//         /*{
 
//        buf321=(uint32_t*)(Frame.Data[a]);
 
//       buf32=(uint32_t*)(outbuf.buffer[a]);
 
//        *(buf32)=(uint32_t)a;//*(buf321);
 
//        a++;
 
//        *(buf32++)=*(buf321++);
 
//        a++;
 
//        *(buf32++)=*(buf321++);
 
//        a++;
 
//        *(buf32++)=*(buf321++);
 
//        }
 
//      for(a=25;a<tmp;a++)
 
//        {
 
//        outbuf.buffer[a]=Frame.Data[a];
 
//        a++;
 
//        outbuf.buffer[a]=Frame.Data[a];
 
//        a++;
 
//        outbuf.buffer[a]=Frame.Data[a];
 
//        a++;
 
//        outbuf.buffer[a]=Frame.Data[a];
 
//        }  */
 
                Time_new=SysTick->VAL&0x00FFFFFF; // ўЄхэшх Єхъє∙хую ёшёЄхьэюую тЁхьхэш
 
                if((SysTick->CTRL&0x10000)==0x10000)
 
                {
 
                        Time_delta=(0x00FFFFFF+Time_old-Time_new);
 
                }
 
                else
 
                {
 
                        Time_delta=(Time_old-Time_new);
 
                };
 
                outbuf.buffer[23]=(uint16_t)((Time_delta&0xFFFF0000)>>16); // ъюы-тю ЄръЄют, чрЄЁрўхээ√ї эр т√ўшёыхэш  - ёЄрЁ°шх срщЄ√
 
                outbuf.buffer[24]=(uint16_t)(Time_delta&0x0000FFFF); // ъюы-тю ЄръЄют, чрЄЁрўхээ√ї эр т√ўшёыхэш  - ьырф°шх срщЄ√
 
        SendPacket(outbuf.buffer,(tmp*2));
 
}
 
 
 
//--- System Timer initialization ---
 
void SysTickInit() // шэшЎшрышчрЎш  ёшёЄхьэюую ЄрщьхЁр
 
{
 
        SysTick->LOAD = 0x00FFFFFF;     //Pause 177 ms (HCLK = 96MHz)
 
        SysTick->CTRL = 0x00000001;     //Enabel SysTick
 
}