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

📄 sja_pelifunc.lst

📁 Small RTOS 下SJA1000驱动程序的编写。主要介绍了在实时操作系统Small RTOS下
💻 LST
📖 第 1 页 / 共 3 页
字号:
 209          {
 210   1          char    SjaFlag;
 211   1          if((ReadSJAReg(REG_CAN_MOD)&RM_RR_BIT) ==  RM_RR_BIT){
 212   2              SjaFlag  =  0;
 213   2          }
 214   1          else{
 215   2              SjaFlag  = 1 ;
 216   2          }
 217   1          return (SjaFlag);
 218   1      }
 219          
 220          /*
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 5   

 221          **********************************************************************************************************
             -**************
 222          **函数原型:  char               SJASetOutControl(unsigned char  OutCtrl)
 223          **参数说明:  OutCtrl    输出控制寄存器的设定值
 224          **返回值:               
 225          **           0                              ; 设置输出控制寄存器成功
 226          **                       SJA_SETOCR_ERR         ; 设置输出控制寄存器错
 227          **                       SJA_NOTRSTMODE     ; sja1000不在复位模式
 228          **
 229          **说明:     该函数用于设定sja1000的输出控制
 230          **********************************************************************************************************
             -**************
 231          */
 232          char            SJASetOutControl(unsigned char  OutCtrl)
 233          {
 234   1              char                    status=0;
 235   1              bit                     ErrorFlag=1;
 236   1              unsigned        char    ErrorCount =0x20;                               //32次,报错
 237   1              if(SJATestRstMode()){                                //处于工作模式
 238   2                      status = SJA_NOTRSTMODE;                        
 239   2              }
 240   1              else{
 241   2                      while(--ErrorCount){
 242   3                              WriteSJAReg(REG_CAN_OCR,OutCtrl);
 243   3                              if(ReadSJAReg(REG_CAN_OCR) == OutCtrl){
 244   4                                      ErrorFlag=0;
 245   4                                      break;
 246   4                              }
 247   3                      }
 248   2                      if(ErrorFlag){
 249   3                              status = SJA_SETOCR_ERR;
 250   3                      }
 251   2              }
 252   1              return  status;
 253   1      }
 254          
 255          /*
 256          **********************************************************************************************************
             -**************
 257          **函数原型:  char               SJASetClockDivision(unsigned    char  clockdiv)
 258          **参数说明:  clockdiv   时钟分频寄存器的设定值
 259          **返回值:               
 260          **           0                              ; 设置时钟分频寄存器成功
 261          **                       SJA_SETCDR_ERR         ; 设置时钟分频寄存器错
 262          **                       SJA_NOTRSTMODE     ; sja1000不在复位模式
 263          **
 264          **说明:     该函数用于设定sja1000的时钟分频寄存器
 265          **********************************************************************************************************
             -**************
 266          *///需修改
 267          char            SJASetClockDivision(unsigned    char  clockdiv)
 268          {
 269   1              char            status=0;
 270   1              bit                     ErrorFlag=1;
 271   1              unsigned        char    ErrorCount =0x20;                               //32次,报错
 272   1              if(SJATestRstMode()){                                //处于工作模式
 273   2                      status = SJA_NOTRSTMODE;                        
 274   2              }
 275   1              else{
 276   2                      while(--ErrorCount){
 277   3                              WriteSJAReg(REG_CAN_CDR,clockdiv);
 278   3                              if(ReadSJAReg(REG_CAN_CDR) == clockdiv){
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 6   

 279   4                                      ErrorFlag=0;
 280   4                                      break;
 281   4                              }
 282   3                      }
 283   2                      if(ErrorFlag){
 284   3                              status = SJA_SETCDR_ERR;
 285   3                      }
 286   2              }
 287   1              return  status;
 288   1      }
 289          
 290          /*
 291          **********************************************************************************************************
             -**************
 292          **函数原型:  char       SJASetAccCode(unsigned char     acr0,unsigned char acr1,
 293          **                                                        unsigned char acr2,unsigned char acr3         
 294          **                                                        )
 295          **参数说明:  acr0       代码验收寄存器0的设定值
 296          **                       acr1   代码验收寄存器1的设定值
 297          **                       acr2   代码验收寄存器2的设定值
 298          **                       acr3   代码验收寄存器3的设定值
 299          **返回值:               
 300          **           0                                ; 设置代码验收寄存器成功
 301          **                       SJA_SETACR_ERR   ; 设置代码验收寄存器错
 302          **                       SJA_NOTRSTMODE       ; sja1000不在复位模式
 303          **
 304          **说明:     该函数用于设定报文滤波的代码验收滤波器
 305          **********************************************************************************************************
             -**************
 306          */
 307          char    SJASetAccCode(unsigned char     acr0,unsigned char acr1,
 308                                            unsigned char acr2,unsigned char acr3         
 309                                            )
 310          {
 311   1              char            status=0;
 312   1              bit                     ErrorFlag=1;
 313   1              unsigned        char    ErrorCount =0x20;                               //32次,报错
 314   1              if(SJATestRstMode()){                                //处于工作模式
 315   2                      status = SJA_NOTRSTMODE;                        
 316   2              }
 317   1              else{
 318   2                      while(--ErrorCount){
 319   3                              WriteSJAReg(REG_CAN_ACR0,acr0);
 320   3                              WriteSJAReg(REG_CAN_ACR1,acr1);
 321   3                              WriteSJAReg(REG_CAN_ACR2,acr2);
 322   3                              WriteSJAReg(REG_CAN_ACR3,acr3);
 323   3                              if(ReadSJAReg(REG_CAN_ACR0) != acr0)continue;
 324   3                              if(ReadSJAReg(REG_CAN_ACR1) != acr1)continue;
 325   3                              if(ReadSJAReg(REG_CAN_ACR2) != acr2)continue;
 326   3                              if(ReadSJAReg(REG_CAN_ACR3) != acr3)continue;
 327   3                              ErrorFlag=0;
 328   3                              break;
 329   3                      }
 330   2                      if(ErrorFlag){
 331   3                              status =SJA_SETACR_ERR; 
 332   3                      }
 333   2                      return  status;
 334   2              }
 335   1      }
 336          
 337          /*
 338          **********************************************************************************************************
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 7   

             -**************
 339          **函数原型:  char       SJASetAccMask(unsigned char     amr0,unsigned char amr1,
 340          **                                                            unsigned char     amr2,unsigned char amr3         
 341          **                                                            )
 342          **参数说明:  amr0       验收屏蔽寄存器0的设定值
 343          **                       amr1   验收屏蔽寄存器1的设定值
 344          **                       amr2   验收屏蔽寄存器2的设定值
 345          **                       amr3   验收屏蔽寄存器3的设定值
 346          **返回值:               
 347          **           0                                    ; 设置验收屏蔽寄存器成功
 348          **                       SJA_SETAMR_ERR   ; 设置验收屏蔽寄存器错
 349          **                       SJA_NOTRSTMODE           ; sja1000不在复位模式
 350          **
 351          **说明:     该函数用于设定报文滤波的验收屏蔽寄存器
 352          **********************************************************************************************************
             -**************
 353          */
 354          char    SJASetAccMask(unsigned char     amr0,unsigned char amr1,
 355                                                unsigned char     amr2,unsigned char amr3         
 356                                                )
 357          {
 358   1              char            status=0;
 359   1              bit                     ErrorFlag=1;
 360   1              unsigned        char    ErrorCount =0x20;                               //32次,报错
 361   1              if(SJATestRstMode()){                                //处于工作模式
 362   2                      status = SJA_NOTRSTMODE;                        
 363   2              }
 364   1              else{
 365   2                      while(--ErrorCount){
 366   3                              WriteSJAReg(REG_CAN_AMR0,amr0);
 367   3                              WriteSJAReg(REG_CAN_AMR1,amr1);
 368   3                              WriteSJAReg(REG_CAN_AMR2,amr2);
 369   3                              WriteSJAReg(REG_CAN_AMR3,amr3);
 370   3                              if(ReadSJAReg(REG_CAN_AMR0) != amr0)continue;
 371   3                              if(ReadSJAReg(REG_CAN_AMR1) != amr1)continue;
 372   3                              if(ReadSJAReg(REG_CAN_AMR2) != amr2)continue;
 373   3                              if(ReadSJAReg(REG_CAN_AMR3) != amr3)continue;
 374   3                              ErrorFlag=0;
 375   3                              break;
 376   3                      }
 377   2                      if(ErrorFlag){
 378   3                              status =SJA_SETAMR_ERR; 
 379   3                      }
 380   2                      return  status;
 381   2              }
 382   1      }
 383          /*
 384          **********************************************************************************************************
             -**************
 385          **函数原型:  char       SJASetBandRateStandard(unsigned char    BandRateSize)
 386          **参数说明:  BandRateSize                 标准常用波特率(Kbps)          
 387          **                              0                                       5
 388          **                              1                                       10
 389          **                              2                                       20
 390          **                              3                                       40
 391          **                              4                                       50
 392          **                              5                                       80
 393          **                              6                                       100
 394          **                              7                                       125
 395          **                              8                                       200
 396          **                              9                                       250
 397          **                              10                                      400
C51 COMPILER V7.02b   SJA_PELIFUNC                                                         03/06/2003 10:03:48 PAGE 8   

 398          **                              11                                      500
 399          **                              12                                      666
 400          **                              13                                      800
 401          **                              14                                      1000              
 402          **返回值:               
 403          **           0                                    ; 设置总线定时器成功
 404          **                       SJA_SETBTR_ERR           ; 设置总线定时器错
 405          **                       SJA_NOBTRSIZE            ;波特率不能设为此值
 406          **
 407          **说明:     该函数用于设定在系统晶体为16MHZ时,常用的标准波特率的值。
 408          **                      参数BandRateSize只能为0~12,其它的值会返回SJA_NOBTRSIZE错误
 409          **                      本函数只能用于复位模式
 410          **********************************************************************************************************
             -**************
 411          */
 412          unsigned  char  code    SJA_BTR_CODETAB[]={
 413                  0xbf,0xff,                                              //;5KBPS的预设值
 414                  0x67,0x2f,                                              //;10KBPS的预设值
 415              0x53,0x2F,                         //;20KBPS的预设值
 416              0x87,0xFF,                     //;40KBPS的预设值
 417              0x47,0x2F,                     //;50KBPS的预设值
 418              0x83,0xFF,                     //;80KBPS的预设值
 419              0x43,0x2f,                     //;100KBPS的预设值
 420             0x03,0x1c,                     //;125KBPS的预设值
 421                  //0x3f,0xff,
 422              0x81,0xfa,                     //;200KBPS的预设值
 423              0x01,0x1c,                     //;250KBPS的预设值
 424              0x80,0xfa,                     //;400KBPS的预设值
 425              0x00,0x1c,                     //;500KBPS的预设值
 426              0x80,0xb6,                     //;666KBPS的预设值
 427              0x00,0x16,                     //;800KBPS的预设值
 428              0x00,0x14                      //;1000KBPS的预设值
 429            };
 430          char    SJASetBandRateStandard(unsigned char    BandRateSize)
 431          {
 432   1              char    status=0;
 433   1              bit             ErrorFlag =1;           
 434   1              unsigned        char    ErrorCount = 0x20;                              //32次报错

⌨️ 快捷键说明

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