Rev 1366 | Rev 1382 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1366 | Rev 1379 | ||
|---|---|---|---|
| Line 42... | Line 42... | ||
| 42 | 42 | ||
| 43 | void calculatePID(void) { |
43 | void calculatePID(void) { |
| 44 | if (PID_Status == PID_OFF){ |
44 | if (PID_Status == PID_OFF){ |
| 45 | ;// use current PWMvalue |
45 | ;// use current PWMvalue |
| 46 | } else { |
46 | } else { |
| - | 47 | //printf("PWM: %d\n",pwmValue); |
|
| - | 48 | uint16_t tempPwm = pwmValue; |
|
| 47 |
|
49 | tempPwm += (int16_t) pid_Controller(referenceValue, measurementValue, &pidData, &pidDebugData); |
| 48 |
|
50 | //printf("InOut: ref: %d, meas: %d\n",(int16_t) (referenceValue*10), (int16_t) (measurementValue*10)); |
| - | 51 | //printf("PWM: %d\n",pwmValue); |
|
| - | 52 | ||
| 49 | if ( |
53 | if (tempPwm < MIN_PWM_VALUE) { |
| 50 |
|
54 | tempPwm = MIN_PWM_VALUE; |
| 51 | } |
55 | } |
| 52 | else if ( |
56 | else if (tempPwm > MAX_PWM_VALUE) { |
| 53 |
|
57 | tempPwm = MAX_PWM_VALUE-1; |
| 54 | } |
58 | } |
| - | 59 | cli(); |
|
| - | 60 | pwmValue = tempPwm; |
|
| - | 61 | sei(); |
|
| - | 62 | //printf("PWM: %d\n",pwmValue); |
|
| 55 | //send current PWM value as soon as possible |
63 | //send current PWM value as soon as possible |
| 56 | sendPID_flag=1; |
64 | sendPID_flag=1; |
| 57 | } |
65 | } |
| 58 | printf("PWM: %d\n",pwmValue); |
- | |
| - | 66 | ||
| 59 | } |
67 | } |
| 60 | 68 | ||
| 61 | 69 | ||
| 62 | void calculatePID_callback(uint8_t timer) |
70 | void calculatePID_callback(uint8_t timer) |
| 63 | { |
71 | { |
| 64 | 72 | ||
| 65 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_SECONDS) { |
73 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_SECONDS) { |
| 66 | static uint8_t seconds = 0; |
74 | static uint8_t seconds = 0; |
| 67 | seconds++; |
75 | seconds++; |
| 68 | if (seconds >= eeprom_read_word(EEDATA16.Time)) |
76 | if (seconds >= eeprom_read_word(EEDATA16.Time)) |
| 69 | { |
77 | { |
| 70 | seconds = 0; |
78 | seconds = 0; |
| 71 | calculatePID_flag = 1; |
79 | calculatePID_flag = 1; |
| 72 | } |
80 | } |
| 73 | } else { |
81 | } else { |
| 74 | calculatePID_flag = 1; |
82 | calculatePID_flag = 1; |
| 75 | } |
83 | } |
| 76 | } |
84 | } |
| 77 | 85 | ||
| 78 | void sendPID(void) |
86 | void sendPID(void) |
| 79 | { |
87 | { |
| 80 | if (eeprom_read_byte(EEDATA.actuatorModuleType) != 0) { |
88 | if (eeprom_read_byte(EEDATA.actuatorModuleType) != 0) { |
| 81 | StdCan_Msg_t txMsg; |
89 | StdCan_Msg_t txMsg; |
| 82 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
90 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
| 83 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_TO_OWNER); |
91 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_TO_OWNER); |
| 84 | txMsg.Header.ModuleType = eeprom_read_byte(EEDATA.actuatorModuleType); ///TODO: Change this to the actual module type |
92 | txMsg.Header.ModuleType = eeprom_read_byte(EEDATA.actuatorModuleType); ///TODO: Change this to the actual module type |
| 85 | txMsg.Header.ModuleId = eeprom_read_byte(EEDATA.actuatorModuleId); |
93 | txMsg.Header.ModuleId = eeprom_read_byte(EEDATA.actuatorModuleId); |
| 86 | txMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_PWM; |
94 | txMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_PWM; |
| 87 | txMsg.Length = 3; |
95 | txMsg.Length = 3; |
| 88 | txMsg.Data[0] = eeprom_read_byte(EEDATA.actuatorId); |
96 | txMsg.Data[0] = eeprom_read_byte(EEDATA.actuatorId); |
| 89 |
|
97 | //uint16_t tempPWM =(uint16_t) (pwmValue*10000); |
| 90 | txMsg.Data[1] = ( ( |
98 | txMsg.Data[1] = ( (pwmValue)>>8)&0xff; |
| 91 | txMsg.Data[2] = ( ( |
99 | txMsg.Data[2] = ( (pwmValue))&0xff; |
| 92 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
100 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
| 93 | } |
101 | } |
| 94 | StdCan_Msg_t txMsg; |
102 | StdCan_Msg_t txMsg; |
| 95 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
103 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
| 96 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
104 | StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER); |
| Line 100... | Line 108... | ||
| 100 | txMsg.Length = 8; |
108 | txMsg.Length = 8; |
| 101 | txMsg.Data[0] = (uint8_t)0x00ff & (((uint32_t)(measurementValue*64))>>8); |
109 | txMsg.Data[0] = (uint8_t)0x00ff & (((uint32_t)(measurementValue*64))>>8); |
| 102 | txMsg.Data[1] = (uint8_t)0x00ff & ((uint32_t)measurementValue*64); |
110 | txMsg.Data[1] = (uint8_t)0x00ff & ((uint32_t)measurementValue*64); |
| 103 | txMsg.Data[2] = (uint8_t)0x00ff & (((uint32_t)(referenceValue*64))>>8); |
111 | txMsg.Data[2] = (uint8_t)0x00ff & (((uint32_t)(referenceValue*64))>>8); |
| 104 | txMsg.Data[3] = (uint8_t)0x00ff & ((uint32_t)referenceValue*64); |
112 | txMsg.Data[3] = (uint8_t)0x00ff & ((uint32_t)referenceValue*64); |
| 105 |
|
113 | //uint16_t tempPWM =(uint16_t) (pwmValue*10000); |
| 106 | txMsg.Data[4] = ( ( |
114 | txMsg.Data[4] = ( (pwmValue)>>8)&0xff; |
| 107 | txMsg.Data[5] = ( ( |
115 | txMsg.Data[5] = ( (pwmValue))&0xff; |
| 108 | txMsg.Data[6] = ((int16_t) (pidDebugData.Sum)>>8)&0xff; |
116 | txMsg.Data[6] = ((int16_t) (pidDebugData.Sum)>>8)&0xff; |
| 109 | txMsg.Data[7] = ((int16_t) (pidDebugData.Sum))&0xff; |
117 | txMsg.Data[7] = ((int16_t) (pidDebugData.Sum))&0xff; |
| 110 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
118 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
| 111 | } |
119 | } |
| 112 | 120 | ||
| 113 | void sendPID_callback(uint8_t timer) { |
121 | void sendPID_callback(uint8_t timer) { |
| 114 | sendPID_flag=1; |
122 | sendPID_flag=1; |
| 115 | } |
123 | } |
| 116 | 124 | ||
| 117 | #ifdef act_PID_SEND_DEBUG_TIMER |
125 | #ifdef act_PID_SEND_DEBUG_TIMER |
| 118 | void sendPID_debug_callback(uint8_t timer) |
126 | void sendPID_debug_callback(uint8_t timer) |
| 119 | { |
127 | { |
| 120 | StdCan_Msg_t txMsg; |
128 | StdCan_Msg_t txMsg; |
| 121 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
129 | StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT); ///TODO: Change this to the actual class type |
| Line 132... | Line 140... | ||
| 132 | txMsg.Data[4] = ((int16_t) (pidDebugData.D_term)>>8)&0xff; |
140 | txMsg.Data[4] = ((int16_t) (pidDebugData.D_term)>>8)&0xff; |
| 133 | txMsg.Data[5] = ((int16_t) (pidDebugData.D_term))&0xff; |
141 | txMsg.Data[5] = ((int16_t) (pidDebugData.D_term))&0xff; |
| 134 | txMsg.Data[6] = ((int16_t) (pidDebugData.Sum)>>8)&0xff; |
142 | txMsg.Data[6] = ((int16_t) (pidDebugData.Sum)>>8)&0xff; |
| 135 | txMsg.Data[7] = ((int16_t) (pidDebugData.Sum))&0xff; |
143 | txMsg.Data[7] = ((int16_t) (pidDebugData.Sum))&0xff; |
| 136 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
144 | while (StdCan_Put(&txMsg) != StdCan_Ret_OK); |
| 137 |
|
145 | //printf("PID: P:%d, I:%d, D:%d, S:%d\n",(int16_t)pidDebugData.P_term,(int16_t)pidDebugData.I_term,(int16_t)pidDebugData.D_term,(int16_t)pidDebugData.Sum); |
| 138 | } |
146 | } |
| 139 | #endif |
147 | #endif |
| 140 | 148 | ||
| 141 | void act_PID_Init(void) |
149 | void act_PID_Init(void) |
| 142 | { |
150 | { |
| Line 163... | Line 171... | ||
| 163 | sensorModuleId = eeprom_read_byte(EEDATA.sensorModuleId); |
171 | sensorModuleId = eeprom_read_byte(EEDATA.sensorModuleId); |
| 164 | sensorId = eeprom_read_byte(EEDATA.sensorId); |
172 | sensorId = eeprom_read_byte(EEDATA.sensorId); |
| 165 | 173 | ||
| 166 | 174 | ||
| 167 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_SECONDS) { |
175 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == CAN_MODULE_ENUM_PID_CONFIG_PARAMETER_TIMEUNIT_SECONDS) { |
| 168 | Timer_SetTimeout(act_PID_TIMER, 1000, TimerTypeFreeRunning, &calculatePID_callback); |
176 | Timer_SetTimeout(act_PID_TIMER, 1000, TimerTypeFreeRunning, &calculatePID_callback); |
| 169 | } else { |
177 | } else { |
| 170 | Timer_SetTimeout(act_PID_TIMER, eeprom_read_word(EEDATA16.Time), TimerTypeFreeRunning, &calculatePID_callback); |
178 | Timer_SetTimeout(act_PID_TIMER, eeprom_read_word(EEDATA16.Time), TimerTypeFreeRunning, &calculatePID_callback); |
| 171 | } |
179 | } |
| 172 | 180 | ||
| 173 | pid_Init((float) eeprom_read_word(EEDATA16.K_P)/64 * SCALING_FACTOR, (float) eeprom_read_word(EEDATA16.K_I)/64 * SCALING_FACTOR , (float) eeprom_read_word(EEDATA16.K_D)/64 * SCALING_FACTOR , &pidData); |
181 | pid_Init((float) eeprom_read_word(EEDATA16.K_P)/64 * SCALING_FACTOR, (float) eeprom_read_word(EEDATA16.K_I)/64 * SCALING_FACTOR , (float) eeprom_read_word(EEDATA16.K_D)/64 * SCALING_FACTOR , &pidData); |
| 174 | pwmValue += (int16_t) pid_Controller(referenceValue, measurementValue, &pidData, &pidDebugData); |
182 | pwmValue += (int16_t) pid_Controller(referenceValue, measurementValue, &pidData, &pidDebugData); |
| 175 | PID_Status = PID_ON; |
183 | PID_Status = PID_ON; |
| 176 | pwmValue = DEFAULT_PWM_VALUE; |
184 | pwmValue = DEFAULT_PWM_VALUE; |
| 177 | Timer_SetTimeout(act_PID_SEND_TIMER, eeprom_read_byte(EEDATA.sendPeriod)*1000, TimerTypeFreeRunning, &sendPID_callback); |
185 | Timer_SetTimeout(act_PID_SEND_TIMER, eeprom_read_byte(EEDATA.sendPeriod)*1000, TimerTypeFreeRunning, &sendPID_callback); |
| 178 | #ifdef act_PID_SEND_DEBUG_TIMER |
186 | #ifdef act_PID_SEND_DEBUG_TIMER |
| 179 | Timer_SetTimeout(act_PID_SEND_DEBUG_TIMER, PID_SEND_DEBUG_PERIOD, TimerTypeFreeRunning, &sendPID_debug_callback); |
187 | Timer_SetTimeout(act_PID_SEND_DEBUG_TIMER, PID_SEND_DEBUG_PERIOD, TimerTypeFreeRunning, &sendPID_debug_callback); |
| Line 256... | Line 264... | ||
| 256 | rxMsg->Data[0] = eeprom_read_byte(EEDATA.actuatorModuleType); |
264 | rxMsg->Data[0] = eeprom_read_byte(EEDATA.actuatorModuleType); |
| 257 | rxMsg->Data[1] = eeprom_read_byte(EEDATA.actuatorModuleId); |
265 | rxMsg->Data[1] = eeprom_read_byte(EEDATA.actuatorModuleId); |
| 258 | rxMsg->Data[2] = eeprom_read_byte(EEDATA.actuatorId); |
266 | rxMsg->Data[2] = eeprom_read_byte(EEDATA.actuatorId); |
| 259 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
267 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
| 260 | rxMsg->Length = 3; |
268 | rxMsg->Length = 3; |
| 261 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
269 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
| 262 | break; |
270 | break; |
| 263 | case CAN_MODULE_CMD_GLOBAL_REPORT_INTERVAL: |
271 | case CAN_MODULE_CMD_GLOBAL_REPORT_INTERVAL: |
| 264 | if (rxMsg->Length == 1) { |
272 | if (rxMsg->Length == 1) { |
| 265 | if (65 <= rxMsg->Data[0]) |
273 | if (65 <= rxMsg->Data[0]) |
| 266 | rxMsg->Data[0]=65; |
274 | rxMsg->Data[0]=65; |
| 267 | if (0 == rxMsg->Data[0]) |
275 | if (0 == rxMsg->Data[0]) |
| 268 | rxMsg->Data[0]=1; |
276 | rxMsg->Data[0]=1; |
| 269 | eeprom_write_byte_crc(EEDATA.sendPeriod, rxMsg->Data[0], WITH_CRC); |
277 | eeprom_write_byte_crc(EEDATA.sendPeriod, rxMsg->Data[0], WITH_CRC); |
| 270 | Timer_SetTimeout(act_PID_SEND_TIMER, rxMsg->Data[0]*1000, TimerTypeFreeRunning, &sendPID_callback); |
278 | Timer_SetTimeout(act_PID_SEND_TIMER, rxMsg->Data[0]*1000, TimerTypeFreeRunning, &sendPID_callback); |
| 271 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
279 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
| 272 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
280 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
| 273 | } |
281 | } |
| 274 | break; |
282 | break; |
| 275 | 283 | ||
| 276 | case CAN_MODULE_CMD_PID_CONFIG_PARAMETER: |
284 | case CAN_MODULE_CMD_PID_CONFIG_PARAMETER: |
| 277 | if (rxMsg->Length == 8) |
285 | if (rxMsg->Length == 8) |
| 278 | { |
286 | { |
| 279 | eeprom_write_word_crc(EEDATA16.K_P, rxMsg->Data[1]+(rxMsg->Data[0]<<8), WITHOUT_CRC); |
287 | eeprom_write_word_crc(EEDATA16.K_P, (uint16_t)rxMsg->Data[1]+(rxMsg->Data[0]<<8), WITHOUT_CRC); |
| 280 | eeprom_write_word_crc(EEDATA16.K_I, rxMsg->Data[3]+(rxMsg->Data[2]<<8), WITHOUT_CRC); |
288 | eeprom_write_word_crc(EEDATA16.K_I, (uint16_t)rxMsg->Data[3]+(rxMsg->Data[2]<<8), WITHOUT_CRC); |
| 281 | eeprom_write_word_crc(EEDATA16.K_D, rxMsg->Data[5]+(rxMsg->Data[4]<<8), WITHOUT_CRC); |
289 | eeprom_write_word_crc(EEDATA16.K_D, (uint16_t)rxMsg->Data[5]+(rxMsg->Data[4]<<8), WITHOUT_CRC); |
| 282 | eeprom_write_byte_crc(EEDATA.TimeMsOrS, ((rxMsg->Data[6]&0x80)>>7), WITHOUT_CRC); |
290 | eeprom_write_byte_crc(EEDATA.TimeMsOrS, ((rxMsg->Data[6]&0x80)>>7), WITHOUT_CRC); |
| 283 | eeprom_write_word_crc(EEDATA16.Time, rxMsg->Data[7]+((rxMsg->Data[6]&0x7f)<<8), WITH_CRC); |
291 | eeprom_write_word_crc(EEDATA16.Time, (uint16_t)rxMsg->Data[7]+((rxMsg->Data[6]&0x7f)<<8), WITH_CRC); |
| 284 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == 0) { |
292 | if (eeprom_read_byte(EEDATA.TimeMsOrS) == 0) { |
| 285 | Timer_SetTimeout(act_PID_TIMER, 1000, TimerTypeFreeRunning, &calculatePID_callback); |
293 | Timer_SetTimeout(act_PID_TIMER, 1000, TimerTypeFreeRunning, &calculatePID_callback); |
| 286 | } else { |
294 | } else { |
| 287 | Timer_SetTimeout(act_PID_TIMER, eeprom_read_word(EEDATA16.Time), TimerTypeFreeRunning, &calculatePID_callback); |
295 | Timer_SetTimeout(act_PID_TIMER, eeprom_read_word(EEDATA16.Time), TimerTypeFreeRunning, &calculatePID_callback); |
| 288 | } |
296 | } |
| 289 | 297 | ||
| 290 | pid_Init((float) eeprom_read_word(EEDATA16.K_P)/64 * SCALING_FACTOR, (float) eeprom_read_word(EEDATA16.K_I)/64 * SCALING_FACTOR , (float) eeprom_read_word(EEDATA16.K_D)/64 * SCALING_FACTOR , &pidData); |
298 | pid_Init((float) eeprom_read_word(EEDATA16.K_P)/64 * SCALING_FACTOR, (float) eeprom_read_word(EEDATA16.K_I)/64 * SCALING_FACTOR , (float) eeprom_read_word(EEDATA16.K_D)/64 * SCALING_FACTOR , &pidData); |
| 291 | pwmValue += (int16_t) pid_Controller(referenceValue, measurementValue, &pidData, &pidDebugData); |
299 | pwmValue += (int16_t) pid_Controller(referenceValue, measurementValue, &pidData, &pidDebugData); |
| 292 | PID_Status = PID_ON; |
300 | PID_Status = PID_ON; |
| 293 | pwmValue = DEFAULT_PWM_VALUE; |
301 | pwmValue = DEFAULT_PWM_VALUE; |
| - | 302 | ||
| - | 303 | rxMsg->Data[0] = (0xff&(eeprom_read_word(EEDATA16.K_P)>>8)); |
|
| - | 304 | rxMsg->Data[1] = (0xff&(eeprom_read_word(EEDATA16.K_P))); |
|
| - | 305 | rxMsg->Data[2] = (0xff&(eeprom_read_word(EEDATA16.K_I)>>8)); |
|
| - | 306 | rxMsg->Data[3] = (0xff&(eeprom_read_word(EEDATA16.K_I))); |
|
| - | 307 | rxMsg->Data[4] = (0xff&(eeprom_read_word(EEDATA16.K_D)>>8)); |
|
| - | 308 | rxMsg->Data[5] = (0xff&(eeprom_read_word(EEDATA16.K_D))); |
|
| - | 309 | rxMsg->Data[6] = (0xff&(eeprom_read_word(EEDATA16.Time)>>8)); |
|
| - | 310 | rxMsg->Data[7] = (0xff&(eeprom_read_word(EEDATA16.Time))); |
|
| - | 311 | rxMsg->Data[6] |= (0x80&(eeprom_read_byte(EEDATA.TimeMsOrS))<<7); |
|
| - | 312 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
|
| - | 313 | rxMsg->Length = 8; |
|
| - | 314 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
|
| 294 | } else |
315 | } else |
| 295 | { |
316 | { |
| 296 | rxMsg->Data[0] = ( |
317 | rxMsg->Data[0] = (0xff&(eeprom_read_word(EEDATA16.K_P)>>8)); |
| 297 | rxMsg->Data[1] = ( |
318 | rxMsg->Data[1] = (0xff&(eeprom_read_word(EEDATA16.K_P))); |
| 298 | rxMsg->Data[2] = ( |
319 | rxMsg->Data[2] = (0xff&(eeprom_read_word(EEDATA16.K_I)>>8)); |
| 299 | rxMsg->Data[3] = ( |
320 | rxMsg->Data[3] = (0xff&(eeprom_read_word(EEDATA16.K_I))); |
| 300 | rxMsg->Data[4] = ( |
321 | rxMsg->Data[4] = (0xff&(eeprom_read_word(EEDATA16.K_D)>>8)); |
| 301 | rxMsg->Data[5] = ( |
322 | rxMsg->Data[5] = (0xff&(eeprom_read_word(EEDATA16.K_D))); |
| 302 | rxMsg->Data[6] = ( |
323 | rxMsg->Data[6] = (0xff&(eeprom_read_word(EEDATA16.Time)>>8)); |
| 303 | rxMsg->Data[7] = ( |
324 | rxMsg->Data[7] = (0xff&(eeprom_read_word(EEDATA16.Time))); |
| 304 | rxMsg->Data[6] |= (0x80&(eeprom_read_byte(EEDATA.TimeMsOrS))<<7); |
325 | rxMsg->Data[6] |= (0x80&(eeprom_read_byte(EEDATA.TimeMsOrS))<<7); |
| 305 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
326 | StdCan_Set_direction(rxMsg->Header, DIRECTIONFLAG_FROM_OWNER); |
| 306 | rxMsg->Length = 8; |
327 | rxMsg->Length = 8; |
| 307 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
328 | while (StdCan_Put(rxMsg) != StdCan_Ret_OK); |
| 308 | } |
329 | } |