📄 sja1000.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 + -