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

📄 sja1000_peli_app.h

📁 sja1000 define head file
💻 H
字号:
#ifndef	_SJA1000_PELI_APP_H
#define	_SJA1000_PELI_APP_H

#ifndef  _SJA_PELICAN_MODE_
#define   _SJA_PELICAN_MODE_
#endif

/*
 ********************************************************************************************************************
 * 定义指针作为访问sja1000的控制
 ********************************************************************************************************************
 */
 //unsigned  char  xdata  *SJA_PCANAddr;  
 
/*
 ********************************************************************************************************************
 * 定义sja1000帧格式的结构类型
 ********************************************************************************************************************
 */
typedef struct 
{
			//unsigned  char DataLength :4; 		   //本次帧的数据dlc
			//unsigned  char ResverBit1 :1;
			//unsigned  char ResverBit2 :1;
   //unsigned  char  RTRFlag    :1;      //远程帧或数据帧标志;0=数据帧;1=远程帧;
			//unsigned  char FrameType  :1;  		  //帧格式类型;0=标准帧;1=扩展帧;
   unsigned  char FrameInfo; 
			unsigned  char FrameID[4];		       //报文识别码
			unsigned  char	Databuf[8];
}SJAFrameStruct;

/*
 ********************************************************************************************************************
 * 定义标准帧或扩展帧的报文识别码的长度
 ********************************************************************************************************************
 */
#define		STD_FRAMEID_LENTH  	0x02
#define		EXT_FRAMEID_LENTH  	0x04

/*
 ********************************************************************************************************************
 * 定义标准帧或扩展帧的长度
 ********************************************************************************************************************
 */
#define		STD_FRAME_LENTH  		11
#define		EXT_FRAME_LENTH  		13
/*
 ********************************************************************************************************************
 *                      SJA1000 的PeliCAN 工作方式命令字定义
 *      每一个命令字都通过将该命令字写入命令寄存器,两条命令之间必须至少间隔一个内部时钟
 *  周期(内部时钟频率为外部振荡器频率的1/2)
 ********************************************************************************************************************
*/
#define     NORMAL_SEND             0x01        //SJA1000正常发送命令,允许自动重发
#define     STOP_SEND               0x02    //中止发送位
#define     SINGLE_SEND             0X03        //单次发送,不自动重发
#define     RELEASE_RX_BUF         0x04       //释放接收缓冲器
#define     CLR_DATA_OVER          0x08      //清除数据溢出
#define     SELF_RCV_REQUEST        0x10        //自身接收请求
#define     SELF_SINGLE_RCVSEND     0X12        //单次自接收性质的信息发送

/*
 ********************************************************************************************************************
 *                      SJA1000 的PeliCAN 工作方式 错误代码定义
 *      每一个PeliCAN 工作方式下的函数都将产生一个返回值,该值应该符合下面的代码定义
 ********************************************************************************************************************
*/
#define     SJA_OK                  0x00

#define     SJA_INTERFACE_ERR      (-1)        //与微处理器接口错
#define     SJA_ENTRYRESET_ERR     (-2)        //进复位状态错
#define     SJA_QUITRESET_ERR      (-3)        //退出复位状态错
#define     SJA_INIT_ERR            (-4)        //SJA1000初始化错
#define     SJA_CODE_ERR            (-5)        //SJA1000代码错
#define     SJA_FRAME_ERR           (-6)        //帧格式错
#define     SJA_WTXBUF_ERR          (-7)        //写sja1000发送缓冲区错

#define     SJA_CANBUS_ERR          (-8)        //总线错误 (关闭)

#define		   SJA_TXBUFLOCK		         	(-9)		//sja1000发送缓冲区锁定
#define		   SJA_RXBUFEMPTY		        (-10)		//sja1000接收缓冲区为空
#define		   SJA_RRXVUF_ERR       			(-11)		//sja1000接收数据错

#define		   SJA_SETACR_ERR        		(-12)		//设置代码验收寄存器错
#define		   SJA_NOTRSTMODE         (-13)		//sja1000不在复位模式,却调用了初始化函数

#define		   SJA_SETBTR_ERR		       	(-14)		//设置总线定时器错
#define		   SJA_NOBTRSIZE		        	(-15)		//波特率不能设为此值

#define		   SJA_SETAMR_ERR        		(-16)		//设置验收屏蔽寄存器错

#define		   SJA_SETOCR_ERR       			(-17)		//设置输出控制寄存器错
#define     SJA_SETCDR_ERR       			(-18)		//设置时钟分频寄存器错

#define     SJA_IMPCMD_ERR        		(-19)		//命令执行出错
#define		   SJA_NOTHISCMD		         (-20)		//没有此命令


/*
 ********************************************************************************************************************
 *                     定义16M的晶体下,CAN总线通用波特率代表的数值   
 ********************************************************************************************************************
*/
#define         ByteRate_5k       	0x00          //波特率5kbps
#define         ByteRate_10k      	0x01          //波特率10kbps
#define         ByteRate_20k      	0x02          //波特率20kbps
#define         ByteRate_40k      	0x03          //波特率40kbps
#define         ByteRate_50k      	0x04          //波特率50kbps
#define         ByteRate_80k      	0x05          //波特率80kbps
#define         ByteRate_100k     	0x06          //波特率100kbps
#define         ByteRate_125k     	0x07          //波特率125kbps
#define         ByteRate_200k     	0x08          //波特率200kbps
#define         ByteRate_250k     	0x09          //波特率250kbps
#define         ByteRate_400k     	0x0A          //波特率400kbps
#define         ByteRate_500k     	0x0B          //波特率500kbps
#define         ByteRate_666k     	0x0C          //波特率666kbps
#define         ByteRate_800k     	0x0D          //波特率800kbps
#define         ByteRate_1000k    	0x0E          //波特率1000kbps

/********************************************************************
 * 读写SJA1000寄存器的函数                                                                             *
 ********************************************************************/
void WriteSJAReg(unsigned int Addr,unsigned char Value);//   *((unsigned char xdata *)Addr)=Value
unsigned char		ReadSJAReg(unsigned int Addr);        //  *((unsigned   char xdata *)Addr)

/*
************************************************************************************************************************
**函数原型:      char    SJA_TEST_INTERFACE(unsigned char  testvalue)
**参数说明:     无
**返回值:
**              1 ; 表示SJA1000接口正常
**              0 ; 表示SJA1000与处理器接口出错
**
**说明:         该函数用于检测CAN控制器的接口是否正常
************************************************************************************************************************
*/
char   SJA_TEST_INTERFACE(unsigned char  testvalue);

/*
************************************************************************************************************************
**函数原型:  char   SJA_ENTRY_RSTMODE(void)
**参数说明:  无
**返回值:
**           SJA_OK             ; 表示SJA1000进入复位模式成功
**           SJA_ENTRYRESET_ERR ; 表示SJA1000进入复位模式失败
**
**说明:     该函数用于使sja1000进入复位模式
************************************************************************************************************************
*/
 char   SJA_ENTRY_RSTMODE(void);
/*
************************************************************************************************************************
**函数原型:   char  SJA_QUIT_RSTMODEL(void)
**参数说明:  无
**返回值:
**           SJA_OK             ; 表示SJA1000退出复位模式成功
**           SJA_QUITRESET_ERR  ; 表示SJA1000退出复位模式失败
**
**说明:     该函数用于使sja1000退出复位模式,进入工作模式
************************************************************************************************************************
*/
char  SJA_QUIT_RSTMODEL(void);

/*
************************************************************************************************************************
**函数原型:  char  SJA_SET_BITMASK(unsigned char RegAdr,unsigned char BitValue)
**参数说明:  RegAdr     要设置位的寄存器地址
**           BitValue   要设置的值
**返回值:
**           SJA_OK       ; 表示设置值 成功
**           SJA_INIT_ERR ; 表示设置值 失败
**
**说明:     该函数用于置位sja1000某寄存器的某位
************************************************************************************************************************
*/
char  SJA_SET_BITMASK(unsigned char RegAdr,unsigned char BitValue);

/*
************************************************************************************************************************
**函数原型: char  SJA_CLEAR_BITMASK(unsigned char RegAdr,unsigned char BitValue)
**参数说明:  RegAdr     要清除位的寄存器地址
**           BitValue   要清除的值
**返回值:
**           SJA_OK       ; 表示位清除 成功
**           SJA_INIT_ERR ; 表示位清除 失败
**
**说明:     该函数用于清除sja1000某寄存器的某位
************************************************************************************************************************
*/
char  SJA_CLEAR_BITMASK(unsigned char RegAdr,unsigned char BitValue);

/*
************************************************************************************************************************
**函数原型:  char   SJA_TEST_RSTMODE(void)
**参数说明:  无
**返回值:
**           0   ; 表示SJA1000处于复位模式
**           1   ; 表示SJA1000处于工作模式
**
**说明:     该函数用于测试SJA1000 处于复位模式还是工作模式
************************************************************************************************************************
*/
char   SJA_TEST_RSTMODE(void);
 /*
************************************************************************************************************************
**函数原型:  char SJA_SET_BANDRATE(unsigned char BandRateSize)
**参数说明:  BandRateSize		  标准常用波特率(Kbps)          
**				0				 5
**				1				10
**				2				20
**				3				40
**				4				50
**				5				80
**				6				100
**				7				125
**				8				200
**				9				250
**				10				400
**				11				500
**				12				666
**				13				800
**				14				1000		  
**返回值:		
**           0		          ; 设置总线定时器成功
**       SJA_SETBTR_ERR		 ; 设置总线定时器错
**		     SJA_NOBTRSIZE		  ; 波特率不能设为此值
**
**说明:     该函数用于设定在系统晶体为16MHZ时,常用的标准波特率的值。
**			参蔅andRateSize只能为0~14,其它的值会返回SJA_NOBTRSIZE错误
**			焙

⌨️ 快捷键说明

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