📄 xkcan_node.lst
字号:
230 1 else if (status == EXP_RUNNING)
231 1 {
232 2 CLOCK_Exp_Start();
233 2 EXP_Status = status;
234 2 }
235 1 else if (status == EXP_PAUSE)
236 1 {
237 2 CLOCK_Exp_Pause();
238 2 EXP_Status = status;
239 2 }
240 1 else if (status == EXP_FAULT)
241 1 {
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 5
242 2 EXP_Status = status;
243 2 }
244 1 else if (status == EXP_STOPPED)
245 1 {
246 2 CLOCK_Exp_Stop();
247 2 EXP_Status = status;
248 2 }
249 1 else if (status == EXP_END_REQUEST)
250 1 {
251 2 CLOCK_Exp_Stop();
252 2 flag_timer_exp_set = 0;
253 2
254 2 txCanFrameTemp.dlc = 1;
255 2 txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_SDO_RX, NID);
256 2 txCanFrameTemp.rtr = 0;
257 2 txCanFrameTemp.dat[0] = SDO_CS_EXP_END_REQUEST;
258 2
259 2 CAN_Transmit( &txCanFrameTemp );
260 2
261 2 EXP_Status = status;
262 2 }
263 1 else if (status == EXP_END)
264 1 {
265 2 CLOCK_Exp_Stop();
266 2 EXP_Status = status;
267 2 }
268 1 else
269 1 {
270 2 //TODO: Add your error handling code here
271 2 //ERROR: Wrong Status
272 2 return EXP_STATUS_ERROR;
273 2 }
274 1
275 1 return status;
276 1 }
277
278 void ex1_int(void) interrupt IE1_VECTOR //using 3 //外部中断1
279 {
280 1 EA = 0;
281 1
282 1 flag_can_ir = CAN_ReadReg(SJA1000_IR); //保持中断寄存器值
283 1 if ( flag_can_ir & SJA1000_IR_RI != 0 )
284 1 {
285 2 CAN_Receive (pWriteRxCanFrame);
286 2 pCanFrameTemp = pWriteRxCanFrameTemp;
287 2 pWriteRxCanFrameTemp = pWriteRxCanFrame;
288 2 pWriteRxCanFrame = pCanFrameTemp;
289 2
290 2 flag_can_rcv = 1;
291 2 }
292 1 if ( flag_can_ir & SJA1000_IR_TI != 0 )
293 1 {
294 2 flag_can_txc = 1;
295 2 }
296 1
297 1 EA = 1;
298 1 }
299
300 void serial_IT(void) interrupt SIO_VECTOR
301 {
302 1 EA = 0;
303 1 if (RI == 1)
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 6
304 1 { /* if reception occur */
305 2 RI = 0; /* clear reception flag for next reception */
306 2 uart_data = SBUF; /* Read receive data */
307 2 flag_uart_rcv = 1;
308 2 }
309 1 else
310 1 {
311 2 flag_uart_txc = 1;
312 2 TI = 0; /* if emission occur */
313 2 }
314 1 EA = 1;
315 1 /* clear emission flag for next emission*/
316 1 }
317
318
319 void pause(){for(;;);}
320 void delay(uint t)
321 {
322 1 int iTemp;
323 1 for ( iTemp = 0; iTemp < t; iTemp++ );
324 1 }
325
326
327 void ParseCanRxData()
328 {
329 1 ubyte cTemp, i, dlc;
330 1
331 1 ubyte csTemp, fcTemp;
332 1
333 1 dlc = pReadRxCanFrame->dlc;
334 1 fcTemp = _GET_FRAME_FC(pReadRxCanFrame);
335 1 csTemp = pReadRxCanFrame->dat[0];
336 1
337 1 if ( fcTemp == FC_NMT_MC)
338 1 {
339 2 if ( csTemp == NMT_MC_CS_START_REMOTE )
340 2 {
341 3 EnterStatus(STATUS_OPERATIONAL);
342 3 }
343 2 else if ( csTemp == NMT_MC_CS_STOP_REMOTE )
344 2 {
345 3 EnterStatus(STATUS_STOPPED);
346 3 }
347 2 else if ( csTemp == NMT_MC_CS_ENTER_PRE_OP )
348 2 {
349 3 EnterStatus(STATUS_PRE_OPERATIONAL);
350 3 }
351 2 else if ( csTemp == NMT_MC_CS_RESET_NODE )
352 2 {
353 3 EnterStatus(STATUS_RESET_APP);
354 3 }
355 2 else if ( csTemp == NMT_MC_CS_RESET_COMM )
356 2 {
357 3 EnterStatus(STATUS_RESET_COMM);
358 3 }
359 2 else
360 2 {
361 3 //TODO: Add your error handling code here
362 3 //ERROR: Recevied undefined NMT Module Control frame
363 3 }
364 2
365 2 // Different Response of p2p frame or broadcast frame
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 7
366 2 }
367 1 else if ( fcTemp == FC_NMT_EC )
368 1 {
369 2 if ( pReadRxCanFrame->rtr == 1 )//&& _GET_FRAME_NID(pReadRxCanFrame) == NID)
370 2 {
371 3 cGuardingToggle = (~cGuardingToggle & 0x80);
372 3 cTemp = cGuardingToggle | NMT_Status;
373 3
374 3 txCanFrameTemp.dlc = 2;
375 3 txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_NMT_EC, NID);
376 3 txCanFrameTemp.rtr = 0;
377 3 txCanFrameTemp.dat[0] = cTemp;
378 3 txCanFrameTemp.dat[1] = EXP_Status;
379 3
380 3 CAN_Transmit( &txCanFrameTemp );
381 3 }
382 2 else
383 2 {
384 3 //TODO: Add your error handling code here
385 3 //ERROR: Recevied undefined NMT Error Control frame
386 3 }
387 2 }
388 1 else if ( fcTemp == FC_SYNC )
389 1 {
390 2 }
391 1 else if ( fcTemp == FC_TIME_STAMP )
392 1 {
393 2 CLOCK_Set(csTemp, pReadRxCanFrame->dat[1], pReadRxCanFrame->dat[2] );
394 2
395 2 TIMER_Restart();
396 2 CLOCK_Start();
397 2 }
398 1 else if ( fcTemp == FC_EMCY )
399 1 {
400 2 }
401 1 else if ( NMT_Status == STATUS_OPERATIONAL )
402 1 {
403 2
404 2 if ( fcTemp == FC_PDO1_TX )
405 2 {
406 3 if ( csTemp == PDO1_TX_SET_SWITCH )
407 3 {
408 4 Switch_Write(0x10);
409 4 for ( i = 1; i <= ETN_SWITCH_BANK_COUNT; i++ )
410 4 {
411 5 Switch_Write( pReadRxCanFrame->dat[i] );
412 5 }
413 4 }
414 3 else if ( csTemp == PDO1_TX_SET_SPC_SWITCH )
415 3 {
416 4 Switch_Write(0x1f + dlc);
417 4 for ( i = 1; i < dlc; i++ )
418 4 {
419 5 Switch_Write( pReadRxCanFrame->dat[i] );
420 5 }
421 4 }
422 3 else if ( csTemp == PDO1_TX_GET_STATUS )
423 3 {
424 4 txCanFrameTemp.dlc = 1 + ETN_STATUS_BANK_COUNT;
425 4 txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_PDO1_RX, NID);
426 4 txCanFrameTemp.rtr = 0;
427 4 txCanFrameTemp.dat[0] = PDO1_TX_GET_STATUS;
C51 COMPILER V8.09 XKCAN_NODE 03/13/2008 06:00:59 PAGE 8
428 4
429 4 for ( i = 1; i <= ETN_STATUS_BANK_COUNT; i++ )
430 4 {
431 5 txCanFrameTemp.dat[i] = regStatus[i];
432 5 }
433 4
434 4 CAN_Transmit( &txCanFrameTemp );
435 4
436 4 }
437 3 else if ( csTemp == PDO1_TX_GET_SPC_STATUS )
438 3 {
439 4 txCanFrameTemp.dlc = dlc;
440 4 txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_PDO1_RX, NID);
441 4 txCanFrameTemp.rtr = 0;
442 4 txCanFrameTemp.dat[0] = PDO1_TX_GET_SPC_STATUS;
443 4
444 4 for ( i = 1; i < dlc; i++ )
445 4 {
446 5 cTemp = pReadRxCanFrame->dat[i];
447 5 txCanFrameTemp.dat[i] = cTemp | ( ( ((regStatus[cTemp>>3])>>(cTemp&0x7)) & 0x01) << 7 );
448 5 // No error handling here
449 5 }
450 4
451 4 CAN_Transmit( &txCanFrameTemp );
452 4 // Reserved
453 4 }
454 3 }
455 2 else if ( fcTemp == FC_PDO2_TX )
456 2 {
457 3 if ( csTemp == PDO2_485_READ && flag_485_tx == 0 )
458 3 {
459 4 _485_GenerateReadFrame( pReadRxCanFrame->dat[1], pReadRxCanFrame->dat[2], &tx485FrameTemp);
460 4 stntype = pReadRxCanFrame->dat[1];
461 4 flag_485_tx = 1;
462 4 }
463 3
464 3 /* else if ( csTemp == PDO2_485_CTRL && flag_485_tx == 0)
465 3 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -