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

📄 can_funs.lst

📁 工业CAN总线网络节点设计 工业CAN总线网络节点设计
💻 LST
字号:
C51 COMPILER V8.09   CAN_FUNS                                                              03/13/2008 06:00:58 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE CAN_FUNS
OBJECT MODULE PLACED IN CAN_funs.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE CAN_funs.c ROM(COMPACT) BROWSE INCDIR(E:\Keil\C51\INC) DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX52.h>
   2          #include <absacc.h>     
   3          
   4          #include "xkcan_defs.h"
   5          #include "sja1000.h"
   6          
   7          #include "CAN_defs.h"
   8          
   9          void CAN_Reset( )
  10          {
  11   1              SJAReset( );
  12   1      }
  13          
  14          ubyte CAN_ReadReg( ubyte addr )
  15          {
  16   1              return rbyte( addr );
  17   1      }
  18          
  19          ubyte CAN_WriteReg( ubyte addr,  ubyte dat )
  20          {
  21   1              wbyte( addr, dat );
  22   1              return 0;
  23   1      }
  24          
  25          ubyte CAN_Open(  _t_can_status * s )
  26          {
  27   1              CAN_WriteReg( SJA1000_MOD,  s->mod );
  28   1              CAN_WriteReg( SJA1000_IER,  s->ier );
  29   1              return 0;
  30   1      //      return CAN_WriteReg( SJA1000_MOD, 0 );
  31   1      }
  32          ubyte CAN_Close( )
  33          {
  34   1              return CAN_WriteReg( SJA1000_MOD, SJA1000_MOD_RM );
  35   1      }
  36          
  37          ubyte CAN_Init( _t_can_status * s )
  38          {
  39   1              CAN_Reset( );
  40   1              CAN_Close( );
  41   1      
  42   1              CAN_WriteReg( SJA1000_BTR0,  s->btr0 );
  43   1              CAN_WriteReg( SJA1000_BTR1,  s->btr1 ); 
  44   1              
  45   1              CAN_WriteReg( SJA1000_CDR,  s->cdr ); 
  46   1      
  47   1              CAN_WriteReg( SJA1000_ACR_BEGIN,        s->acr0  );     //( ( s->cobid )>>3 ) & 0xff     );
  48   1              CAN_WriteReg( SJA1000_ACR_BEGIN+1,      s->acr1  );     //( ( s->cobid )<<5 ) & 0xe0     );  
  49   1              CAN_WriteReg( SJA1000_ACR_BEGIN+2,      s->acr2  );     //( ( s->cobid )>>3 ) & 0xff     );
  50   1              CAN_WriteReg( SJA1000_ACR_BEGIN+3,      s->acr3  );     //( ( s->cobid )<<5 ) & 0xe0     );
  51   1              
  52   1      
  53   1              CAN_WriteReg( SJA1000_AMR_BEGIN,        s->amr0  );     //0xf0 );
  54   1              CAN_WriteReg( SJA1000_AMR_BEGIN+1,      s->amr1  );     //0x1f );
  55   1              CAN_WriteReg( SJA1000_AMR_BEGIN+2,      s->amr2  );     //0x1f );
C51 COMPILER V8.09   CAN_FUNS                                                              03/13/2008 06:00:58 PAGE 2   

  56   1              CAN_WriteReg( SJA1000_AMR_BEGIN+3,      s->amr3  );     //0xff );
  57   1              
  58   1              CAN_WriteReg( SJA1000_OCR, s->ocr );
  59   1                      
  60   1              return 0;
  61   1      }
  62          
  63          ubyte CAN_Receive( _t_can_frame * s )
  64          {
  65   1              ubyte rxfi, rxid1, rxid2, i;
  66   1      
  67   1              rxfi =  CAN_ReadReg( SJA1000_RX_FI );
  68   1              rxid1 = CAN_ReadReg( SJA1000_SFF_RX_ID_BEGIN );
  69   1              rxid2 = CAN_ReadReg( SJA1000_SFF_RX_ID_END );
  70   1      
  71   1              s->cobid = ((uint)rxid1) << 3 | ( ( rxid2 >> 5 ) & 0x07 );
  72   1              s->rtr  = ( rxfi>>6 ) & 1;
  73   1      
  74   1              rxfi = rxfi & 0x0f;
  75   1              s->dlc  = rxfi;
  76   1      
  77   1              for ( i = 0; i < rxfi; i++ )
  78   1              {
  79   2                      s->dat[i] = CAN_ReadReg( SJA1000_SFF_RX_DATA_BEGIN + i );
  80   2              }
  81   1      
  82   1              CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB );//^= SJA1000_IR_RI;
  83   1              return 0;
  84   1      }
  85          
  86          ubyte CAN_Transmit( _t_can_frame * s )
  87          {
  88   1              ubyte dlc, i;
  89   1              
  90   1              dlc = s->dlc;
  91   1              
  92   1              CAN_WriteReg( SJA1000_TX_FI, ( s->rtr<<6 )|dlc );
  93   1              //CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB|SJA1000_CMR_CDO );//SJA1000_CMR_TR;
  94   1              
  95   1              CAN_WriteReg( SJA1000_SFF_TX_ID_BEGIN,  ( ( s->cobid )>>3 ) & 0xff );
  96   1              CAN_WriteReg( SJA1000_SFF_TX_ID_END,    ( ( s->cobid )<<5 ) & 0xe0 );
  97   1      
  98   1              for ( i = 0; i < dlc; i++ )
  99   1              {
 100   2                       CAN_WriteReg( SJA1000_SFF_TX_DATA_BEGIN + i, s->dat[i] );
 101   2              }
 102   1      
 103   1              CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_TR );
 104   1              return 0;
 105   1      
 106   1      }
 107          
 108          
 109          
 110          /*ubyte CAN_Receive( _t_can_frame * s )
 111          {
 112                  ubyte t0, t1, t2;
 113                  t0 = CAN_ReadReg( SJA1000_RX_FI );
 114                  t1 = CAN_ReadReg( SJA1000_SFF_RX_ID_BEGIN );
 115                  t2 = CAN_ReadReg( SJA1000_SFF_RX_ID_END );
 116                  s->fc   = t1>>4;
 117                  s->nid  = ( t1<<3|t2>>5 ) & 0x7f;
C51 COMPILER V8.09   CAN_FUNS                                                              03/13/2008 06:00:58 PAGE 3   

 118                  s->rtr  = ( t0>>6 ) & 1;
 119                  t0 = t0 & 0x0f;
 120                  s->dlc  = t0;
 121          
 122                  for ( t1 = 0; t1 < t0; t1++ )
 123                  {
 124                          s->dat[t1] = CAN_ReadReg( SJA1000_SFF_RX_DATA_BEGIN+t1 );
 125                  }
 126          
 127                  CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB );//^= SJA1000_IR_RI;
 128                  return 0;
 129          }
 130          
 131          ubyte CAN_Transmit( _t_can_frame * s )
 132          {
 133                  ubyte dlc, i;
 134                  
 135                  dlc = s->dlc;
 136                  
 137                  CAN_WriteReg( SJA1000_TX_FI, ( s->rtr<<6 )|dlc );
 138                  CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_RRB|SJA1000_CMR_CDO );//SJA1000_CMR_TR;
 139                  
 140                  CAN_WriteReg( SJA1000_SFF_TX_ID_BEGIN, ( s->fc<<4 )|( s->nid>>3 ) );
 141                  CAN_WriteReg( SJA1000_SFF_TX_ID_END, ( s->nid<<5 ) );
 142          
 143                  for ( i = 0; i < dlc; i++ )
 144                  {
 145                           CAN_WriteReg( SJA1000_SFF_TX_DATA_BEGIN + i, s->dat[i] );
 146                  }
 147          
 148                  CAN_WriteReg( SJA1000_CMR, SJA1000_CMR_TR );
 149                  return 0;
 150          
 151          }*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    567    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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