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

📄 sja_pelican.c

📁 参考周立功的basic模式的CAN通讯
💻 C
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------
// FileName   : SJA_PeliCan.c
// Description: PeliCan 功能实现文件
// DateTime   : 2006-05-11 Create
// Author     : jztx-liuweiming
// Version    : TxCmsPrj Ver1.0
//----------------------------------------------------------------------
// SJA1000, 16M晶振 PeliCan模式, 2006年5月11日开始调试, 参考周立功源代码
// 锦州拓新电力电子公司 刘伟明
//----------------------------------------------------------------------

/************************************************************************
**描述:    独立的CAN 控制器SJA1000基本硬件头文件定义(PeliCAN 工作方式)
**文件名:   SJA_PeliCan.H
**应用语言: KEIL C51
**版本 :    V1.0
**广州周立功单片机发展有限公司 保留所有的版权
*************************************************************************/

#include    "SJA_PeliCan.H"
#include    <string.h>

/************************************************************************
 *以下为基本的函数说明(BasicCAN)                                       *
 ************************************************************************/

/************************************************************************
 *函数原型:  bit   PCan_SelfTest(void)                                  * 
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示SJA1000接口正常                                    *
 *           1 ; 表示SJA1000与处理器接口不正常                          *
 *                                                                      * 
 *说明: 该函数用于检测CAN控制器的接口是否正常                           *
 ************************************************************************/
 bit   PCan_SelfTest(void)
 {  
    Sja_PeliCan  = REG_TEST;                //访问测试寄存器          
    *Sja_PeliCan = 0xAA;                    //写入测试值
    if ( *Sja_PeliCan == 0xAA )
    {
      return    0;                           //读测试正确
    }
    else
    {    
      return    1;
    } 
 }      

 /************************************************************************
 *函数原型:  bit   PCan_Select_PeliModel(void)                           *
 *参数说明:  无                                                          *
 *返回值:                                                                *
 *           0 ; 表示成功选择Peli模式                                    *
 *           1 ; 表示不能选择Peli模式                                    *
 *                                                                       *
 *说明:      CAN控制器选择Peli模式                                       *
 ************************************************************************/ 
 bit   PCan_Set_CDR(unsigned char PCan_CDR)
 {
    unsigned   char   TempData;
    Sja_PeliCan  = REG_CDR;                   //访问地址指向控制寄存器 
    TempData     = *Sja_PeliCan;              //保存原始值
    *Sja_PeliCan = (TempData | PCan_CDR);     //置位复位请求
    if ( (*Sja_PeliCan&PCan_CDR) == 1 )
    {
      return   0;
    }
    else
    {
      return   1;
    }
 }

/************************************************************************
 *函数原型:      bit   PCan_Enter_RstModel(void)                        *
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示成功进入复位工作模式                               *
 *           1 ; 表示不能进入复位工作模式                               *
 *                                                                      * 
 *说明:      CAN控制器进入复位工作模式                                  *
 ************************************************************************/ 
 bit   PCan_Enter_RstModel(void)
 {
    unsigned   char   TempData;
    Sja_PeliCan  = REG_CONTROL;                   //访问地址指向控制寄存器 
    TempData     = *Sja_PeliCan;                  //保存原始值
    *Sja_PeliCan = (TempData | 0x01);             //置位复位请求
    if ( (*Sja_PeliCan&0x01) == 1 )
    {
      return   0;
    }
    else
    {
      return   1;
    }
 }

/************************************************************************
 *函数原型:      bit   PCan_Quit_RstModel(void)                         *
 *参数说明:  无                                                         *
 *返回值:                                                               *
 *           0 ; 表示成功退出复位工作模式                               *
 *           1 ; 表示不能退出复位工作模式                               *
 *                                                                      * 
 *说明:      CAN控制器退出复位工作模式                                  *
 ************************************************************************/ 
 bit   PCan_Quit_RstModel(void)
 {
    unsigned   char   TempData;
    Sja_PeliCan  = REG_CONTROL;                  //访问地址指向控制寄存器 
    TempData     = *Sja_PeliCan;                 //保存原始值
    *Sja_PeliCan = (TempData & 0xfe);   	     //清除复位请求
    if ( (*Sja_PeliCan&0x01) == 0 )
    {
      return   0;                                //退出成功
    }
    else
    {
      return   1;                                //退出失败
    }
 }

/************************************************************************
;*函数原型:   bit  PCan_Set_BandRateE(unsigned char CAN_ByteRate)       *
;*参数说明:  CAN_ByteRate  波特率(Kbit/s) BTR0     BTR1               *
;*           0	            20              053H,    02FH               *
;*           1	            40              087H,    0FFH               *  
;*           2	            50              047H,    02FH               *
;*           3	            80              083H,    0FFH               *
;*           4	            100             043H,    02fH               *
;*           5	            125             03H,     01cH               *
;*           6              200             081H,    0faH               *
;*           7	            250             01H,     01cH               *
;*           8	            400             080H,    0faH               *
;*           9	            500             00H,     01cH               *
;*           10	            666             080H,    0b6H               *
;*           11	            800             00H,     016H               *
;*           12	            1000            00H,     014H               *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为16MHZ,       *
///////////////////////////////////////////////////////////////////////// 
;*参数说明:  CAN_ByteRate    波特率(Kbit/s) BTR0     BTR1             *
;*           0              5                 0EFH     0FFH             *
;*           1              10                0D7H     0FFH             *
;*           2              20                0CBH     0FFH             *
;*           3              40                0C5H     0FFH             *
;*           4              50                0C9H     0A7H             *
;*           5              80                0C2H     0FFH             *
;*           6              100               04H      0A7H             *
;*           7              200               02H      025H             *
;*           8              250               01H      045H             *
;*           9              300               01H      025H             *
;*           10             500               01H      012H             *
;*           11             600               00H      025H             *
;*           12             1000              00H      012H             *
;*                                                                      *
;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为12MHZ,       *
///////////////////////////////////////////////////////////////////////// 
;*返回值:                                                               *
;*           0 ;波特率设置成功                                          *
;*           1 ;波特率设置失败                                          *
;*                                                                      * 
;*说明:其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于        *
;*     复位模式                                                         *  
;************************************************************************/
 
unsigned  char	code	SJA_BTR_CODETAB[]={
    0x53,0x2F,		               //;(晶振16MHZ) 20KBPS的预设值
    0x87,0xFF,                     //;(晶振16MHZ) 40KBPS的预设值
    0x47,0x2F,                     //;(晶振16MHZ) 50KBPS的预设值
    0x83,0xFF,                     //;(晶振16MHZ) 80KBPS的预设值
    0x43,0x2f,                     //;(晶振16MHZ) 100KBPS的预设值
    0x03,0x1c,                     //;(晶振16MHZ) 125KBPS的预设值
    0x81,0xfa,                     //;(晶振16MHZ) 200KBPS的预设值
    0x01,0x1c,                     //;(晶振16MHZ) 250KBPS的预设值
    0x80,0xfa,                     //;(晶振16MHZ) 400KBPS的预设值
    0x00,0x1c,                     //;(晶振16MHZ) 500KBPS的预设值
    0x80,0xb6,                     //;(晶振16MHZ) 666KBPS的预设值
    0x00,0x16,                     //;(晶振16MHZ) 800KBPS的预设值
    0x00,0x14                      //;(晶振16MHZ) 1000KBPS的预设值 
};

bit   PCan_Set_BandRate(unsigned char CAN_ByteRate)
{
  //载入标准波特率的的预设值
  unsigned  char  BTR0_num, BTR1_num;
  BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
  BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2 + 1];
  
  Sja_PeliCan  = REG_BTR0;         //访问地址指向总线定时寄存器0
  *Sja_PeliCan = BTR0_num;      	//写入参数
  if ( *Sja_PeliCan != BTR0_num )	//校验写入值
  {
    return  1; 
  }

  Sja_PeliCan  = REG_BTR1;         //访问地址指向总线定时寄存器0
  *Sja_PeliCan = BTR1_num;      	//写入参数
  if ( *Sja_PeliCan != BTR1_num )	//校验写入值
  {
    return  1; 
  }

  return    0;
}  

/************************************************************************
;*函数原型:   bit    PCan_Set_Object(unsigned char  PCan_ACR0,          *
                                     unsigned char  PCan_ACR1,          *
                                     unsigned char  PCan_ACR2,          *
                                     unsigned char  PCan_ACR3,          *
                                     unsigned char  PCan_AMR0,          *
									 unsigned char  PCan_AMR1,          *
									 unsigned char  PCan_AMR2,          *
									 unsigned char  PCan_AMR3)          *
*参数说明:                                                              *
 *    PCan_ACR:存放验收代码寄存器(ACR)的参数设置                      *
 *    PCan_AMR:存放接收屏蔽寄存器(AMR)的参数设置                      *
;*返回值:                                                               *
;*           0 ;通信对象设置成功                                        *
;*           1 ;通信对象设置失败                                        *
;*                                                                      * 
;*说明:设置CAN节点的通讯对象                                            *
;*    该子程序只能用于复位模式                                          * 
;************************************************************************/
bit PCan_Set_Object(unsigned char  PCan_ACR0, 
					unsigned char  PCan_ACR1, 
					unsigned char  PCan_ACR2, 
					unsigned char  PCan_ACR3, 
					unsigned char  PCan_AMR0,
					unsigned char  PCan_AMR1,
					unsigned char  PCan_AMR2,
					unsigned char  PCan_AMR3)
{
  Sja_PeliCan  = REG_AcceptCode0;   //访问地址指向验收代码寄存器(ACR1)
  *Sja_PeliCan = PCan_ACR0;        	//写入参数
  if ( *Sja_PeliCan != PCan_ACR0 ) 	//校验写入值
  {
    return  1; 
  }

  Sja_PeliCan  = REG_AcceptCode1;  	//访问地址指向验收代码寄存器(ACR2)
  *Sja_PeliCan = PCan_ACR1;        	//写入参数
  if ( *Sja_PeliCan != PCan_ACR1 ) 	//校验写入值
  {
    return  1; 
  }

  Sja_PeliCan  = REG_AcceptCode2;  	//访问地址指向验收代码寄存器(ACR3)
  *Sja_PeliCan = PCan_ACR2;        	//写入参数
  if ( *Sja_PeliCan != PCan_ACR2 ) 	//校验写入值
  {
    return  1; 

⌨️ 快捷键说明

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