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

📄 sja1000.h

📁 s3c2410 arm实验箱关于Can总线的驱动代码。代码条理清晰
💻 H
字号:
/*
****************************************Copyright (c)**************************************************
**                                  广州致远电子有限公司
**                                        CAN开发组 
**                                 http://www.zyinside.com
**
**
**--------------文件信息--------------------------------------------------------------------------------
**文   件   名: SJA1000.h
**创   建   人: 滕欣欣
**创 建  日 期: 2005-04-13
**描        述: SJA1000 CAN控制器操作函数声明
**最后修改日期:2006-03-03
**原 始  版 本:v1.0
**最 后  版 本:v1.2
**--------------历史修改--------------------------------------------------------------------------------
**修   改   人:
**修 改  日 期:
**修 改  原 因:
**修 改  版 本:
********************************************************************************************************
*/
#ifndef SJA1000_H
#define SJA1000_H
#include "Typedef.h"
#include "SJA1000Rsg.h"
#include <linux/ioctl.h>


extern void *sja1000_ale;
extern void *sja1000_dat;
/*
***********************************
	该行命令码为linux ioctl函数定义
***********************************
*/
#define CAN_BUS_TYPE	0x40
#define BAUD_SIZE	INT16U
#define ARC_SIZE	INT32U
#define AMR_SIZE	INT32U
#define IOCTL_BAUD	_IOWR(CAN_BUS_TYPE,0x01,sizeof(BAUD_SIZE))	
#define IOCTL_ACR	_IOWR(CAN_BUS_TYPE,0x02,sizeof(ARC_SIZE))
#define IOCTL_AMR	_IOWR(CAN_BUS_TYPE,0x03,sizeof(AMR_SIZE))
/*
********************************************************************************************************************
**宏	名		:  	Write_SJA1000(Val, OffSet)
**参数说明		:	Val		->	欲写入的数据
**				:	OffSet	->	SJA1000片内寄存器偏移地址	
**说	明		:	该宏用于写SJA1000内部寄存器
********************************************************************************************************************
*/
void Write_SJA1000(INT8U Val, INT8U OffSet);
/*
********************************************************************************************************************
**宏	名		:  	Read_SJA1000(OffSet)
**参数说明		:	OffSet	->	SJA1000片内寄存器偏移地址	
**说	明		:	该宏用于写SJA1000内部寄存器
********************************************************************************************************************
*/
INT8U Read_SJA1000(INT8U OffSet);

/*
*****************************
	模式寄存器设定值定义
*****************************
*/
#define MOD_LOM		0x01
#define MOD_STM		0x02
#define MOD_AFM_SIG	0x04
#define MOD_AFM_DOB	0x08
/*
*****************************
	命令寄存器命令值定义
*****************************
*/
#define CMR_NOM_SD	0x01
#define CMR_SLF_SD	0x02
#define CMR_SIG_SD	0x03
#define CMR_CL_BUF	0x05
#define CMR_CL_DATA	0x06
/*
*****************************
	状态寄存器状态掩码值定义
*****************************
*/
#define SR_RCV_VALI	0x01
#define SR_DAT_OVER 0x02
#define SR_TBF_VALI	0x04
#define SR_TRM_COMP 0x08
#define SR_RCV_PROC	0x10
#define SR_TRM_PROC	0x20
#define SR_ERR_OCCR	0x40
#define SR_BUS_ERR	0x80
/*
*****************************
	中断寄存器状态掩码值定义
*****************************
*/
#define	IR_RC	0x01
#define	IR_TR	0x02
#define IR_ER	0x04
#define	IR_DO	0x08
#define	IR_WU	0x10
#define	IR_EP	0x20
#define	IR_AL	0x40
#define	IR_BE	0x80
/*
*****************************
	中断使能寄存器输入值定义
*****************************
*/
#define	IER_RC	0x01
#define	IER_TR	0x02
#define IER_ER	0x04
#define	IER_DO	0x08
#define	IER_WU	0x10
#define	IER_EP	0x20
#define	IER_AL	0x40
#define	IER_BE	0x80
#define IER_ALL	0xFF
/*
*****************************
	标准波特率值(16MHz)
*****************************
*/
#define	BTR_1000K	0x0014U
#define BTR_800K	0x0016U
#define BTR_500K	0x001CU
#define BTR_250K	0x011CU
#define	BTR_125K	0x031CU
#define BTR_100K	0x041CU
#define BTR_50K		0x091CU
#define BTR_20K		0x181CU
#define BTR_10K		0x311CU
/*
*****************************
	时钟分频寄存器CAN模式定义
*****************************
*/
#define BAIS_CAN	0x00
#define PELI_CAN	0x01
/*
*****************************
	各寄存器偏移地址定义
*****************************
*/
#define	MOD		0
#define CMR		1
#define SR		2
#define IR		3
#define IER		4
#define	BTR0	6
#define	BTR1	7
#define	OCR		8
#define	TEST	9
#define	ALC		11
#define	ECC		12
#define	EWL		13
#define RXERR	14
#define TXERR	15
#define TXBUF	16
#define RXBUF	16
#define ACR0	16
#define AMR0	20
#define CDR		31
/*
*****************************
	发送结构定义
*****************************
*/
typedef union tagFramInfo
{
	INT32U Byte;
	struct
	{
		INT32U	DLC		:4;
		INT32U	Resv1	:2;
		INT32U	RTR		:1;
		INT32U	FF		:1;
		INT32U	Resv2	:24;
	}Bits;
}FramInfo;
typedef struct tagSJA1000_BufInfo
{
	INT32U		FrID;
	FramInfo	FrIf;
	INT8U		DA[8];
}stcSJA1000_BufInfo;
/*
********************************************************************************************************************
**函数原型		:  	BOOL SJA_SoftRst(BOOL bIsRst)
**参数说明		:	bIsRst	->	TURE	SJA1000进入软件复位模式	
**				:				FALSE	SJA1000退出软件复位模式
**返回值		:	TURE	->	成功完成相应设置
**				:	FALSE	->	设置失败
**说	明		:	
********************************************************************************************************************
*/
BOOL SJA_SoftRst(BOOL bIsRst);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetModeReg(INT8U Val, BOOL bIsEn)
**参数说明		:	Val		->	设置模式值	MOD_LOM			只听模式
**				:							MOD_STM			自测试模式
**				:							MOD_AFM_SIG		单滤波方式
**				:							MOD_AFM_DOB		双滤波方式
**				:	bIsEn	->	设定方式	TRUE			使能设定
**				;							FALSE			禁能设定
**返回值		:	TURE	->	成功完成相应设置
**				:	FALSE	->	设置失败	
**说	明		:	该函数设定SJA1000模式,必须在软件复位模式中调用,否则失败,模式值可并联使用
********************************************************************************************************************
*/
BOOL SetModeReg(INT8U Val, BOOL bIsEn);
/*
********************************************************************************************************************
**函数原型		:  	BOOL EnterSleepMod(BOOL IsEn)
**参数说明		:	IsEn	->	SJA1000请求进入复位模式
**返回值		:	TURE	->	成功完成相应设置
**				:	FALSE	->	设置失败	
**说	明		:	该函数必须在工作模式下调用,否则失败
********************************************************************************************************************
*/
BOOL EnterSleepMod(BOOL IsEn);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetCommand(INT8U Cmd)
**参数说明		:	Cmd		->	命令字	CMR_NOM_SD	正常发送
**				:						CMR_SIG_SD	单次发送
**				:						CMR_SLF_SD	自发自收
**				:						CMR_CL_BUF	释放接收缓缓冲区
**				:						CMR_CL_DATA	清除数据溢出状态
**返回值		:	无
**说	明		:	每次调用该函数只能发送一条命令值
********************************************************************************************************************
*/
void SetCommand(INT8U Cmd);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetInterrupt(INT8U Val, BOOL IsEn)
**参数说明		:	Val		->	中断值	IER_RC--IER_BE
**				:	IsEn	->	是否使能该中断
**返回值		:	
**说	明		:	中断值可并联使用,全部使能,禁能中断时可使用 IER_ALL
********************************************************************************************************************
*/
BOOL SetInterrupt(INT8U Val, BOOL IsEn);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetBaudRate(INT16U BaudVal)
**参数说明		:	BaudVal		->	波特率值,由 定时器0<<8|定时器1 组成
**返回值		:	
**说	明		:	该函必须在软件复位模式下调用
********************************************************************************************************************
*/
BOOL SetBaudRate(INT16U BaudVal);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetOutPutMod(INT8U Val)
**参数说明		:	Val		->	输出模式值
**返回值		:	
**说	明		:	通常设为0x1A
********************************************************************************************************************
*/
BOOL SetOutPutMod(INT8U Val);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetClkDiv(INT8U CAN_Mod,BOOL bRxINTEn,BOOL bClkOFF,INT8U Div)
**参数说明		:	CAN_Mod		->	CAN模式值	BAIS_CAN
**				:								PELI_CAN
**				:	bRxINTEn	->	是否使用Tx1引脚作为接收中断指示
**				:	bClkOFF		->	是否使用频率输出引脚
**				:	Div			->	0-7,表示(Val+1)*2分频
**返回值		:	
**说	明		:	该函数必须在软件复位模式下调用
********************************************************************************************************************
*/
BOOL SetClkDiv(INT8U CAN_Mod,BOOL bRxINTEn,BOOL bClkOFF,INT8U Div);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SJA1000Init(INT8U CanMode, INT16U BaudRate,INT32U ACRCode, INT32U AMRCode)
**参数说明		:	CanMode		->	CAN模式值	BAIS_CAN
**				:								PELI_CAN
**				:	BaudRate	->	波特率值
**				:	ACRCode		->	验收代码
**				:	AMRCode		->	验收屏蔽码
**返回值		:	
**说	明		:	该函数必须在软件复位模式下调用
********************************************************************************************************************
*/
BOOL SJA1000Init(INT8U CanMode, INT16U BaudRate,INT32U ACRCode, INT32U AMRCode);

/*
********************************************************************************************************************
**函数原型		:  	void SetTxBuf(stcSJA1000_TxInfo *pTxInfo)
**参数说明		:	pTxInfo		->	发送数据的结构体指针
**返回值		:	
**说	明		:	调用该函数写入欲发送的数据
********************************************************************************************************************
*/
void SetTxBuf(stcSJA1000_BufInfo *pTxInfo);
/*
********************************************************************************************************************
**函数原型		:  	BOOL ReadRcvBuf(stcSJA1000_BufInfo *pRcvBuf)
**参数说明		:	pRcvBuf		->	接收输出数据的结构体指针
**返回值		:	
**说	明		:	调用该函数接收CAN数据
********************************************************************************************************************
*/
BOOL ReadRcvBuf(stcSJA1000_BufInfo *pRcvBuf);
/*
********************************************************************************************************************
**函数原型		:  	BOOL SetFliter(INT32U ACRCode, INT32U AMRCode)
**参数说明		:	ACRCode		->	验收代码值	ACR0_ACR1_ACR2_ACR3
**				:	AMRCode		->	验收屏蔽码	AMR0_AMR1_AMR2_AMR3
**返回值		:	
**说	明		:	调用该函数写入欲发送的数据
********************************************************************************************************************
*/
BOOL SetFliter(INT32U ACRCode, INT32U AMRCode);
/*
********************************************************************************************************************
**函数原型		:  	BOOL ACRCode(INT32U ACRCode)
**参数说明		:	ACRCode		->	验收代码值	ACR0_ACR1_ACR2_ACR3
**返回值		:	
**说	明		:	调用该函数设置验收代码
********************************************************************************************************************
*/
BOOL ACRCode(INT32U ACRCode);
/*
********************************************************************************************************************
**函数原型		:  	BOOL AMRCode(INT32U AMRCode)
**参数说明		:	AMRCode		->	验收屏蔽码	AMR0_AMR1_AMR2_AMR3
**返回值		:	
**说	明		:	调用该函数设置验收屏蔽码
********************************************************************************************************************
*/
BOOL AMRCode(INT32U AMRCode);
/*
********************************************************************************************************************
**函数原型		:  	void IntEnty(void)
**参数说明		:	NULL
**返回值		:	NULL
**说	明		:	中断处理入口
********************************************************************************************************************
*/
void IntEnty(void);

#endif
/*
*********************************************************************************************************
**                            End Of File
*********************************************************************************************************
*/

⌨️ 快捷键说明

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