Subversion Repositories BL-Ctrl

Rev

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

Rev 1 Rev 18
Line 58... Line 58...
58
//++ Empfangs-Part der Datenübertragung
58
//++ Empfangs-Part der Datenübertragung
59
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
59
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
60
SIGNAL(INT_VEC_RX)
60
SIGNAL(INT_VEC_RX)
61
{
61
{
62
 static unsigned char serPacketCounter = 100;
62
 static unsigned char serPacketCounter = 100;
63
 SioTmp = UDR;
63
 
64
#if  X3D_SIO == 1
64
#if  X3D_SIO == 1
-
 
65
    SioTmp = UDR;
65
        if(SioTmp == 0xF5)     // Startzeichen
66
        if(SioTmp == 0xF5)     // Startzeichen
66
         {
67
         {
67
          serPacketCounter = 0;
68
          serPacketCounter = 0;
68
         }
69
         }
69
        else
70
        else
Line 76... Line 77...
76
          else
77
          else
77
          {
78
          {
78
           if(serPacketCounter > 100) serPacketCounter = 100;
79
           if(serPacketCounter > 100) serPacketCounter = 100;
79
                  }
80
                  }
80
         }
81
         }
-
 
82
#else
-
 
83
 static unsigned int crc;
-
 
84
 static unsigned char crc1,crc2,buf_ptr;
-
 
85
 static unsigned char UartState = 0;
-
 
86
 unsigned char CrcOkay = 0;
-
 
87
 
-
 
88
 SioTmp = UDR;
-
 
89
 if(buf_ptr >= MAX_EMPFANGS_BUFF)    UartState = 0;
-
 
90
 if(SioTmp == '\r' && UartState == 2)
-
 
91
  {
-
 
92
   UartState = 0;
-
 
93
   crc -= RxdBuffer[buf_ptr-2];
-
 
94
   crc -= RxdBuffer[buf_ptr-1];
-
 
95
   crc %= 4096;
-
 
96
   crc1 = '=' + crc / 64;
-
 
97
   crc2 = '=' + crc % 64;
-
 
98
   CrcOkay = 0;
-
 
99
   if((crc1 == RxdBuffer[buf_ptr-2]) && (crc2 == RxdBuffer[buf_ptr-1])) CrcOkay = 1; else { CrcOkay = 0; };
-
 
100
   if(!NeuerDatensatzEmpfangen && CrcOkay) // Datensatz schon verarbeitet
-
 
101
    {
-
 
102
     NeuerDatensatzEmpfangen = 1;
-
 
103
         
-
 
104
     RxdBuffer[buf_ptr] = '\r';
-
 
105
         if(/*(RxdBuffer[1] == MeineSlaveAdresse || (RxdBuffer[1] == 'a')) && */(RxdBuffer[2] == 'R')) wdt_enable(WDTO_250MS); // Reset-Commando
-
 
106
        }                                
-
 
107
  }
-
 
108
  else
-
 
109
  switch(UartState)
-
 
110
  {
-
 
111
   case 0:
-
 
112
          if(SioTmp == '#' && !NeuerDatensatzEmpfangen) UartState = 1;  // Startzeichen und Daten schon verarbeitet
-
 
113
                  buf_ptr = 0;
-
 
114
                  RxdBuffer[buf_ptr++] = SioTmp;
-
 
115
                  crc = SioTmp;
-
 
116
          break;
-
 
117
   case 1: // Adresse auswerten
-
 
118
                  UartState++;
-
 
119
                  RxdBuffer[buf_ptr++] = SioTmp;
-
 
120
                  crc += SioTmp;
-
 
121
                  break;
-
 
122
   case 2: //  Eingangsdaten sammeln
-
 
123
                  RxdBuffer[buf_ptr] = SioTmp;
-
 
124
                  if(buf_ptr < MAX_EMPFANGS_BUFF) buf_ptr++;
-
 
125
                  else UartState = 0;
-
 
126
                  crc += SioTmp;
-
 
127
                  break;
-
 
128
   default:
-
 
129
          UartState = 0;
-
 
130
          break;
-
 
131
  }
-
 
132
 
-
 
133
         
81
#endif
134
#endif
82
};
135
};
Line 83... Line 136...
83
 
136
 
Line 155... Line 208...
155
 
208
 
156
        UCR=(1 << TXEN) | (1 << RXEN);
209
        UCR=(1 << TXEN) | (1 << RXEN);
157
    // UART Double Speed (U2X)
210
    // UART Double Speed (U2X)
158
        USR   |= (1<<U2X);          
211
        USR   |= (1<<U2X);          
159
        // RX-Interrupt Freigabe
-
 
-
 
212
        // RX-Interrupt Freigabe
160
#if  X3D_SIO == 1
213
 
161
        UCSRB |= (1<<RXCIE);    // serieller Empfangsinterrupt       
214
        UCSRB |= (1<<RXCIE);    // serieller Empfangsinterrupt       
162
#endif
215
 
163
        // TX-Interrupt Freigabe
216
        // TX-Interrupt Freigabe
Line 164... Line 217...
164
//      UCSRB |= (1<<TXCIE);           
217
//      UCSRB |= (1<<TXCIE);           
165
 
218
 
166
        //Teiler wird gesetzt 
219
        //Teiler wird gesetzt 
167
        UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
220
        UBRR= (SYSCLK / (BAUD_RATE * 8L) -1 );
168
        //öffnet einen Kanal für printf (STDOUT)
221
        //öffnet einen Kanal für printf (STDOUT)
-
 
222
        fdevopen (uart_putchar, NULL);
169
        fdevopen (uart_putchar, NULL);
223
    Debug_Timer = SetDelay(200);  
-
 
224
    // Version beim Start ausgeben (nicht schön, aber geht... )
170
  Debug_Timer = SetDelay(200);  
225
        uart_putchar ('\n');uart_putchar ('B');uart_putchar ('L');uart_putchar (':');