Subversion Repositories BL-Ctrl

Rev

Rev 18 | Rev 24 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 18 Rev 23
Line 20... Line 20...
20
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
20
unsigned volatile char SendeBuffer[MAX_SENDE_BUFF];
21
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
21
unsigned volatile char RxdBuffer[MAX_EMPFANGS_BUFF];
22
unsigned volatile char NeuerDatensatzEmpfangen = 0;
22
unsigned volatile char NeuerDatensatzEmpfangen = 0;
23
unsigned volatile char UebertragungAbgeschlossen = 1;
23
unsigned volatile char UebertragungAbgeschlossen = 1;
24
unsigned char MeineSlaveAdresse;
24
unsigned char MeineSlaveAdresse;
-
 
25
unsigned char MotorTest[4] = {0,0,0,0};
-
 
26
unsigned volatile char AnzahlEmpfangsBytes = 0;
Line 25... Line 27...
25
 
27
 
Line 26... Line 28...
26
struct str_DebugOut    DebugOut;
28
struct str_DebugOut    DebugOut;
Line 51... Line 53...
51
   UDR = tmp_tx;
53
   UDR = tmp_tx;
52
  }
54
  }
53
  else ptr = 0;
55
  else ptr = 0;
54
}
56
}
Line -... Line 57...
-
 
57
 
-
 
58
// --------------------------------------------------------------------------
-
 
59
void Decode64(unsigned char *ptrOut, unsigned char len, unsigned char ptrIn,unsigned char max)  // Wohin mit den Daten; Wie lang; Wo im RxdBuffer
-
 
60
{
-
 
61
 unsigned char a,b,c,d;
-
 
62
 unsigned char ptr = 0;
-
 
63
 unsigned char x,y,z;
-
 
64
 while(len)
-
 
65
  {
-
 
66
   a = RxdBuffer[ptrIn++] - '=';
-
 
67
   b = RxdBuffer[ptrIn++] - '=';
-
 
68
   c = RxdBuffer[ptrIn++] - '=';
-
 
69
   d = RxdBuffer[ptrIn++] - '=';
-
 
70
   if(ptrIn > max - 2) break;     // nicht mehr Daten verarbeiten, als empfangen wurden
-
 
71
 
-
 
72
   x = (a << 2) | (b >> 4);
-
 
73
   y = ((b & 0x0f) << 4) | (c >> 2);
-
 
74
   z = ((c & 0x03) << 6) | d;
-
 
75
 
-
 
76
   if(len--) ptrOut[ptr++] = x; else break;
-
 
77
   if(len--) ptrOut[ptr++] = y; else break;
-
 
78
   if(len--) ptrOut[ptr++] = z; else break;
-
 
79
  }
-
 
80
 
-
 
81
}
Line 55... Line 82...
55
 
82
 
56
 
83
 
57
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
84
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
58
//++ Empfangs-Part der Datenübertragung
85
//++ Empfangs-Part der Datenübertragung
59
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
86
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
60
SIGNAL(INT_VEC_RX)
-
 
Line 61... Line 87...
61
{
87
SIGNAL(INT_VEC_RX)
-
 
88
{
62
 static unsigned char serPacketCounter = 100;
89
 
63
 
90
#if  X3D_SIO == 1
64
#if  X3D_SIO == 1
91
 static unsigned char serPacketCounter = 100;
65
    SioTmp = UDR;
92
    SioTmp = UDR;
66
        if(SioTmp == 0xF5)     // Startzeichen
93
        if(SioTmp == 0xF5)     // Startzeichen
Line 95... Line 122...
95
   crc %= 4096;
122
   crc %= 4096;
96
   crc1 = '=' + crc / 64;
123
   crc1 = '=' + crc / 64;
97
   crc2 = '=' + crc % 64;
124
   crc2 = '=' + crc % 64;
98
   CrcOkay = 0;
125
   CrcOkay = 0;
99
   if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
126
   if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
100
   if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
127
   if(CrcOkay) // Datensatz schon verarbeitet
101
    {
128
    {
102
     NeuerDatensatzEmpfangen = 1;
129
     //NeuerDatensatzEmpfangen = 1; 
-
 
130
         AnzahlEmpfangsBytes = buf_ptr;
103
         
131
     
104
     RxdBuffer[buf_ptr] = '\r';
132
     RxdBuffer[buf_ptr] = '\r';
105
         if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
133
         if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
-
 
134
     uart_putchar(RxdBuffer[2]);         
-
 
135
         if (RxdBuffer[2] == 't') // Motortest
-
 
136
            { Decode64((unsigned char *) &MotorTest[0],sizeof(MotorTest),3,AnzahlEmpfangsBytes);
-
 
137
                          SIO_Sollwert = MotorTest[MOTORADRESSE - 1];
-
 
138
              SIO_Timeout = 500; // werte für 500ms gültig
-
 
139
 
-
 
140
                        }
106
        }                                
141
        }                                
107
  }
142
  }
108
  else
143
  else
109
  switch(UartState)
144
  switch(UartState)
110
  {
145
  {