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

📄 can591_pelifunc.lst

📁 can总线通信的以C51庫文件
💻 LST
📖 第 1 页 / 共 3 页
字号:
 426   2                      while(--ErrorCount){
 427   3                                      WriteSJAReg(REG_CAN_BTR0,SJA_BTR_CODETAB[BandRateSize*2]);
 428   3                                      WriteSJAReg(REG_CAN_BTR1,SJA_BTR_CODETAB[BandRateSize*2+1]);
 429   3                                      if(ReadSJAReg(REG_CAN_BTR0) != SJA_BTR_CODETAB[BandRateSize*2])continue;
 430   3                                      if(ReadSJAReg(REG_CAN_BTR1) != SJA_BTR_CODETAB[BandRateSize*2+1])continue;
 431   3                                      ErrorFlag=0;
 432   3                                      break;
 433   3                              
 434   3                      }//while结束
 435   2                      if(ErrorFlag){
 436   3                              status =SJA_SETBTR_ERR; 
 437   3                      }
 438   2              }
 439   1              return  status;
 440   1      }
 441          
 442          /*
 443          **********************************************************************************************************
             -**************
 444          **函数原型:  char       SJASystemPrgCMD(unsigned char cmd)
 445          **参数说明:  cmd        CAN591 的PeliCAN 工作方式命令字
 446          **返回值:               
 447          **           0                            ; 表示命令执行成功
 448          **                       SJA_IMPCMD_ERR   ; 表示命令执行出错
 449          **                       SJA_NOTHISCMD    ; 没有此命令
 450          **
 451          **说明:     该函数用于执行591的命令
 452          **********************************************************************************************************
             -**************
 453          */
 454          char    SJASystemPrgCMD(unsigned char cmd)
 455          {
 456   1              char    status=0;
 457   1      
C51 COMPILER V7.01  CAN591_PELIFUNC                                                        04/10/2003 14:04:02 PAGE 9   

 458   1              switch(cmd){
 459   2                      case    0x01:
 460   2                      case    0x03:
 461   2                                  WriteSJAReg(REG_CAN_CMR,cmd);
 462   2                                      break;
 463   2                      case    0x02:
 464   2                                      if((ReadSJAReg(REG_CAN_SR)&TBS_BIT) == 0){
 465   3                                              status =  SJA_IMPCMD_ERR;
 466   3                                      }
 467   2                                      break;
 468   2                      case    0x04:
 469   2                                      WriteSJAReg(REG_CAN_CMR,cmd);
 470   2                                      break;
 471   2                      case    0x08:
 472   2                                      WriteSJAReg(REG_CAN_CMR,cmd);
 473   2                                      break;
 474   2                      case    0x10:
 475   2                      case    0x12:
 476   2                                  WriteSJAReg(REG_CAN_CMR,cmd);
 477   2                                      break;
 478   2                      default:
 479   2                                      status = SJA_NOTHISCMD; 
 480   2                                      break;
 481   2              }
 482   1          return              status;
 483   1      
 484   1      }
 485          
 486          /*
 487          **********************************************************************************************************
             -**************
 488          **函数原型:  char       SJASendData(unsigned    char                    *databuf,
 489          **                                                                      unsigned        char    cmd
 490          **                                                                      )
 491          **参数说明:  databuf    存放要发送到总线的特定帧格式的数据的缓冲区首地址
 492          **                       cmd            591发送命令
 493          **返回值:               
 494          **           0                            ; 表示将数据成功的发送到can总线
 495          **                       SJA_TXBUFLOCK    ; 591发送缓冲区锁定
 496          **           SJA_WTXBUF_ERR   ; 表示写发送缓冲区失败
 497          **                       SJA_IMPCMD_ERR   ; 表示命令执行出错
 498          **
 499          **说明:        本函数用于向can总线发送数据
 500          **********************************************************************************************************
             -**************
 501          */
 502          char    SJASendData(unsigned    char                    *databuf,
 503                                                  unsigned        char    cmd
 504                                                  )
 505          {       
 506   1              char    status=0;
 507   1              unsigned        char    len;
 508   1              unsigned        char    temp = (*databuf&0x0f);
 509   1              if(temp>8)temp=8;
 510   1              
 511   1              if( (ReadSJAReg(REG_CAN_SR)&TCS_BIT) ==0){//591发送缓冲区锁定
 512   2                      status =        SJA_TXBUFLOCK;
 513   2              }
 514   1              else if( (ReadSJAReg(REG_CAN_SR)&RS_BIT) !=0){//正在接收
 515   2                      status =        SJA_WTXBUF_ERR;
 516   2              }
 517   1              
C51 COMPILER V7.01  CAN591_PELIFUNC                                                        04/10/2003 14:04:02 PAGE 10  

 518   1              else{
 519   2                      switch(*databuf&0xC0) { 
 520   3                              case    0x00://标准帧、数据帧
 521   3                                              len=STD_FRAMEID_LENTH+temp+1;
 522   3                                              WriteSJARegBlock(REG_CAN_TXFMINFO,databuf,len);
 523   3                                              status=SJASystemPrgCMD(cmd);
 524   3                                              break;
 525   3                              case    0x40://标准帧、远程帧
 526   3                                              len=STD_FRAMEID_LENTH+1;
 527   3                                              WriteSJARegBlock(REG_CAN_TXFMINFO,databuf,len);
 528   3                                              status=SJASystemPrgCMD(cmd);
 529   3                                              break;  
 530   3                              case    0x80://扩展帧、数据帧
 531   3                                              len=EXT_FRAMEID_LENTH+temp+1;
 532   3                                              WriteSJARegBlock(REG_CAN_TXFMINFO,databuf,len);
 533   3                                              status=SJASystemPrgCMD(cmd);
 534   3                                              break;
 535   3                              case    0xC0://扩展帧、远程帧
 536   3                                              len=EXT_FRAMEID_LENTH+1;
 537   3                                              WriteSJARegBlock(REG_CAN_TXFMINFO,databuf,len);
 538   3                                              status=SJASystemPrgCMD(cmd);
 539   3                                              break;                          
 540   3                              default:status = SJA_WTXBUF_ERR;
 541   3                                              break;
 542   3                      }       
 543   2              }
 544   1              
 545   1              return  status;
 546   1      }
 547          /*
 548          **********************************************************************************************************
             -**************
 549          **函数原型:  char       SJARcvData(unsigned     char                    *databuf)
 550          **参数说明:  databuf    存放要接收数据缓冲区首地址
 551          **                       
 552          **返回值:               
 553          **           0                            ; 表示将读取数据成功
 554          **                       SJA_RXBUFEMPTY   ; 591接收缓冲区为空
 555          **           SJA_RRXVUF_ERR   ; 591接收数据错
 556          **
 557          **说明:        本函数用于接收can总线数据
 558          **********************************************************************************************************
             -**************
 559          */
 560          char    SJARcvData(unsigned     char                    *databuf)
 561          {
 562   1              char    status=0;
 563   1              unsigned        char    len;
 564   1              unsigned        char    temp;
 565   1              *databuf= ReadSJAReg(REG_CAN_RXFMINFO);
 566   1              temp = (*databuf&0x0f);
 567   1              if(temp>8)temp=8;
 568   1      
 569   1              if( (ReadSJAReg(REG_CAN_SR)&RBS_BIT ) ==0){//591接收缓冲区为空
 570   2                      status =        SJA_RXBUFEMPTY  ;
 571   2              }
 572   1              
 573   1              else{
 574   2                      switch(*databuf&0xC0) { 
 575   3                              case    0x00://标准帧、数据帧
 576   3                                              len=STD_FRAMEID_LENTH+temp;
 577   3                                              ReadSJARegBlock(REG_CAN_RXBUF1,databuf+1,len);
C51 COMPILER V7.01  CAN591_PELIFUNC                                                        04/10/2003 14:04:02 PAGE 11  

 578   3                                              status= SJASystemPrgCMD(RELEASE_RX_BUF);
 579   3                                              break;
 580   3                              case    0x40://标准帧、远程帧
 581   3                                              
 582   3                                              ReadSJARegBlock(REG_CAN_RXBUF1,databuf+1,STD_FRAMEID_LENTH);
 583   3                                              status= SJASystemPrgCMD(RELEASE_RX_BUF);
 584   3                                              break;  
 585   3                              case    0x80://扩展帧、数据帧
 586   3                                              len=EXT_FRAMEID_LENTH+temp;
 587   3                                              ReadSJARegBlock(REG_CAN_RXBUF1,databuf+1,len);
 588   3                                              status=SJASystemPrgCMD(RELEASE_RX_BUF);  
 589   3                                              break;
 590   3                              case    0xC0://扩展帧、远程帧
 591   3                                              
 592   3                                              ReadSJARegBlock(REG_CAN_RXBUF1,databuf+1,EXT_FRAMEID_LENTH);
 593   3                                              status= SJASystemPrgCMD(RELEASE_RX_BUF);
 594   3                                              break;                          
 595   3                              default:status = SJA_RRXVUF_ERR;
 596   3                                              break;
 597   3                      }
 598   2              }
 599   1              return  status; 
 600   1      }
 601          
 602          /*
 603          **********************************************************************************************************
             -**************
 604          **函数原型:     unsigned        char    ReadALCReg(void)
 605          **参数说明:     无
 606          **返回值:               错误仲裁寄存器(alc)的内容
 607          **             
 608          **说明:         该函数用于读取错误仲裁寄存器(alc)的内容
 609          **********************************************************************************************************
             -**************
 610          */
 611          unsigned        char    ReadALCReg(void)
 612          {
 613   1              return(ReadSJAReg(REG_CAN_ALC)); 
 614   1      }
 615          
 616          /*
 617          **********************************************************************************************************
             -**************
 618          **函数原型:     unsigned        char    ReadECCReg(void)
 619          **参数说明:     无
 620          **返回值:               错误捕捉寄存器(ecc)的内容
 621          **             
 622          **说明:         该函数用于读取错误捕捉寄存器(ecc)的内容
 623          **********************************************************************************************************
             -**************
 624          */
 625          unsigned        char    ReadECCReg(void)
 626          {
 627   1              return(ReadSJAReg(REG_CAN_ECC)); 
 628   1      }
 629          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1039    ----
   CONSTANT SIZE    =     30    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V7.01  CAN591_PELIFUNC                                                        04/10/2003 14:04:02 PAGE 12  

   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      51
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -