📄 can591_pelifunc.lst
字号:
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 + -