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 (':'); |