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 | { |