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

📄 sja_pelifunc.lst

📁 Small RTOS 下SJA1000驱动程序的编写。主要介绍了在实时操作系统Small RTOS下
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 1   


C51 COMPILER V7.02b, COMPILATION OF MODULE SJA_PELIFUNC
OBJECT MODULE PLACED IN .\SJA_PELIfunc.obj
COMPILER INVOKED BY: F:\Keilv702\C51\BIN\C51.EXE ..\cansja1000\SJA_PELIfunc.c BROWSE NOINTPROMOTE INCDIR(G:\S_RTOS_TEST\
                    -INC\) DEBUG OBJECTEXTEND PRINT(.\SJA_PELIfunc.lst) OBJECT(.\SJA_PELIfunc.obj)

stmt level    source

   1          /*
   2           *********************************************************************************************************
             -***********
   3           *描述:    独立的CAN 控制器SJA1000pelican模式应用函数文件
   4           *文件名:   SJA_PELI.C
   5           *应用语言: KEIL C51
   6           *版本 :    V1.01
   7           *广州周立功单片机发展有限公司 保留所有的版权
   8           *********************************************************************************************************
             -***********
   9           */
  10          #define         _SJA_PELICAN_MODE_
  11          #define         _GLOBAL_SJA1000_PELI_APP_
  12          
  13          /*
  14          **********************************************************************************************************
             -**************
  15          **                           导入头文件
  16          **********************************************************************************************************
             -**************
  17          */
  18          #include        "SJA1000_PELI_APP.H"
  19          
  20          /*
  21          **********************************************************************************************************
             -**************
  22          **                           函数原型说明
  23          **********************************************************************************************************
             -**************
  24          */
  25          
  26          /*
  27          **********************************************************************************************************
             -**************
  28          **函数原型:     char   SJATestInterface(unsigned char  testvalue)
  29          **参数说明:     Value  测试值
  30          **返回值:
  31          **              SJA_OK            ; 表示SJA1000接口正常
  32          **              SJA_INTERFACE_ERR ; 表示SJA1000与处理器接口出错
  33          **
  34          **说明:         该函数用于检测CAN控制器的接口是否正常
  35          **********************************************************************************************************
             -**************
  36          */
  37           char    SJATestInterface(unsigned char  testvalue)
  38           {
  39   1          char                        status=0;
  40   1              bit             ErrorFlag =1;
  41   1              unsigned        char    ErrorCount = 0x20;                                                      //32次报错
  42   1              unsigned        char    temp = testvalue; 
  43   1              while(--ErrorCount){
  44   2              //WriteSJAReg(REG_CAN_TEST,testvalue);
  45   2                      WriteSJAReg(REG_CAN_TEST,temp);
  46   2              if(ReadSJAReg(REG_CAN_TEST) ==  temp){
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 2   

  47   3                              temp =~temp ;
  48   3                              WriteSJAReg(REG_CAN_TEST,temp);
  49   3                              if(ReadSJAReg(REG_CAN_TEST) ==  temp){
  50   4                                                      temp =0;
  51   4                                      WriteSJAReg(REG_CAN_TEST,temp);
  52   4                                                      ErrorFlag =0;
  53   4                                                      break;
  54   4                              }
  55   3                              else    continue;
  56   3              }
  57   2              }
  58   1          if(ErrorFlag){
  59   2             status  =  SJA_INTERFACE_ERR ;
  60   2          }
  61   1          return (status);
  62   1       }
  63          
  64          /*
  65          **********************************************************************************************************
             -**************
  66          **函数原型:  char   SJAEntryResetMode(void)
  67          **参数说明:  无
  68          **返回值:
  69          **           SJA_OK             ; 表示SJA1000进入复位模式成功
  70          **           SJA_ENTRYRESET_ERR ; 表示SJA1000进入复位模式失败
  71          **
  72          **说明:     该函数用于使sja1000进入复位模式
  73          **********************************************************************************************************
             -**************
  74          */
  75          char   SJAEntryResetMode(void) 
  76          {
  77   1              char                    status=0;
  78   1              unsigned        char            ErrorFlag =1;
  79   1              unsigned        char    ErrorCount = 0x20;                                                      //32次报错
  80   1              while(--ErrorCount){
  81   2                      if((status = SetBitMask(REG_CAN_MOD,RM_RR_BIT)) == 0){  
  82   3                              ErrorFlag =0;
  83   3                              break;
  84   3                      }
  85   2          }
  86   1              if(ErrorFlag){
  87   2             status  = SJA_ENTRYRESET_ERR;
  88   2              }
  89   1          return (status);
  90   1      }
  91          
  92          /*
  93          **********************************************************************************************************
             -**************
  94          **函数原型:  char   SJAQuitResetMode(void)
  95          **参数说明:  无
  96          **返回值:
  97          **           SJA_OK             ; 表示SJA1000退出复位模式成功
  98          **           SJA_QUITRESET_ERR  ; 表示SJA1000退出复位模式失败
  99          **
 100          **说明:     该函数用于使sja1000退出复位模式,进入工作模式
 101          **********************************************************************************************************
             -**************
 102          */
 103          char   SJAQuitResetMode(void)
 104          {
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 3   

 105   1          char                        status=0;
 106   1              unsigned        char            ErrorFlag =1;
 107   1              unsigned        char    ErrorCount = 0x20;                                                      //32次报错
 108   1              while(--ErrorCount){
 109   2                      if((status=ClearBitMask(REG_CAN_MOD,RM_RR_BIT)) == 0){
 110   3                              ErrorFlag =0;
 111   3                              break;
 112   3                      }
 113   2              }
 114   1              if(ErrorFlag){
 115   2             status  = SJA_QUITRESET_ERR;
 116   2              }
 117   1          return (status);
 118   1      }
 119          
 120          /*
 121          **********************************************************************************************************
             -**************
 122          **函数原型:  char   SJAEntryPeliCANMode(void)
 123          **参数说明:  无
 124          **返回值:
 125          **           SJA_OK         ; 表示SJA1000进入PeliCAN模式 成功
 126          **           SJA_INIT_ERR   ; 表示SJA1000进入PeliCAN模式 失败
 127          **
 128          **说明:     该函数用于使sja1000进入PeliCAN模式
 129          **********************************************************************************************************
             -**************
 130          */
 131          char   SJAEntryPeliCANMode(void)
 132          {
 133   1          char                        status=0;
 134   1          if(SJATestRstMode()){                                //处于工作模式
 135   2             status = SJAEntryResetMode();
 136   2          }
 137   1          if(status == 0){                                                                     //处于复位模式
 138   2             status = SetBitMask(REG_CAN_CDR,CANMode_BIT);    //置位sja1000模式控制位
 139   2          }
 140   1          return (status);
 141   1      }
 142          
 143          /*
 144          **********************************************************************************************************
             -**************
 145          **函数原型:  char  SetBitMask(unsigned char RegAdr,unsigned char BitValue)
 146          **参数说明:  RegAdr     要设置位的寄存器地址
 147          **           BitValue   要设置的值
 148          **返回值:
 149          **           SJA_OK       ; 表示设置值 成功
 150          **           SJA_INIT_ERR ; 表示设置值 失败
 151          **
 152          **说明:     该函数用于置位sja1000某寄存器的某位
 153          **********************************************************************************************************
             -**************
 154          */
 155          char  SetBitMask(unsigned char RegAdr,unsigned char BitValue)
 156          {
 157   1          char                        status=0;
 158   1          unsigned char   temp;
 159   1          temp = ReadSJAReg(RegAdr)|BitValue;
 160   1          WriteSJAReg(RegAdr,temp);
 161   1          if(ReadSJAReg(RegAdr) == temp){
 162   2              status  =  SJA_OK;
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 4   

 163   2          }
 164   1          else{
 165   2              status  =  SJA_INIT_ERR ;
 166   2          }
 167   1          return (status);
 168   1      }
 169          
 170          /*
 171          **********************************************************************************************************
             -**************
 172          **函数原型:  char  ClearBitMask(unsigned char RegAdr,unsigned char BitValue)
 173          **参数说明:  RegAdr     要清除位的寄存器地址
 174          **           BitValue   要清除的值
 175          **返回值:
 176          **           SJA_OK       ; 表示位清除 成功
 177          **           SJA_INIT_ERR ; 表示位清除 失败
 178          **
 179          **说明:     该函数用于清除sja1000某寄存器的某位
 180          **********************************************************************************************************
             -**************
 181          */
 182          char  ClearBitMask(unsigned char RegAdr,unsigned char BitValue)
 183          {
 184   1          char                        status=0;
 185   1          unsigned char   temp;
 186   1          temp = ReadSJAReg(RegAdr)&(~BitValue);
 187   1          WriteSJAReg(RegAdr,temp);
 188   1          if(ReadSJAReg(RegAdr) == temp){
 189   2              status  =  SJA_OK;
 190   2          }
 191   1          else{
 192   2              status  =  SJA_INIT_ERR ;
 193   2          }
 194   1          return (status);
 195   1      }
 196          
 197          /*
 198          **********************************************************************************************************
             -**************
 199          **函数原型:  char   SJATestRstMode(void)
 200          **参数说明:  无
 201          **返回值:
 202          **           0   ; 表示SJA1000处于复位模式
 203          **           1   ; 表示SJA1000处于工作模式
 204          **
 205          **说明:     该函数用于测试SJA1000 处于复位模式还是工作模式
 206          **********************************************************************************************************
             -**************
 207          */
 208          char   SJATestRstMode(void)

⌨️ 快捷键说明

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