⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xkcan_node.lst

📁 CAN工业节点设计、CAN控制器为SJA1000.C源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -