📄 sja1000.h
字号:
//***************************************************************************************************
//描 述:独立CAN控制器SJA1000基本硬件头文件定义(PeliCAN工作方式) *
//文 件 名:sja1000.h *
//日 期:2007年8月21日 *
//***************************************************************************************************
#ifndef _PeliCANCONF_H
#define _PeliCANCONF_H
#include "config.h"
//***************************************************************************************************
//SJA1000与微处理器的接口是以外部存储器的方式,所以以下的基址定义,用户应根据自己的实际电路来进行调整
//计算SJA1000在电路中的实际地址:基址+内部寄存器地址
//***************************************************************************************************
#define SJA_BaseAdr 0x0000 //定义sja1000的片选基址
//***************************************************************************************************
//以下的定义为SJA1000的内部寄存器的地址和位定义,不可修改各寄存器的具体功能清参阅sja1000的数据手册
//***************************************************************************************************
#define REG_MODE SJA_BaseAdr+0x00 //模式寄存器
#define Bit_RM 0x01 //复位模式请求位
#define Bit_LOM 0x02 //只听模式位
#define Bit_STM 0x04 //自检测模式位
#define Bit_AFM 0x08 //验收滤波器模式位(单滤波器模式)
#define Bit_SM 0x10 //睡眠模式位
#define REG_COMMAND SJA_BaseAdr+0x01 //命令寄存器(读为0)
#define Bit_TR 0x01 //发送请求位
#define Bit_AT 0x02 //中止发送位
#define Bit_RRB 0x04 //释放接收缓冲器位
#define Bit_CDO 0x08 //清除数据溢出位
#define Bit_SRR 0x10 //自接收模式请求位
#define REG_STATUS SJA_BaseAdr+0x02 //状态寄存器(只读)
#define Bit_RBS 0x01 //接收缓冲器状态位
#define Bit_DOS 0x02 //数据溢出状态位
#define Bit_TBS 0x04 //发送缓冲器状态位
#define Bit_TCS 0x08 //发送完毕状态位
#define Bit_RS 0x10 //接收状态位
#define Bit_TS 0x20 //发送状态位
#define Bit_ES 0x40 //出错状态位
#define Bit_BS 0x80 //总线状态位
#define REG_INTERRUPT SJA_BaseAdr+0x03 //中断寄存器(只读)
#define Bit_RI 0x01 //接收中断位
#define Bit_TI 0x02 //发送中断位
#define Bit_EI 0x04 //错误警告中断位
#define Bit_DOI 0x08 //数据溢出中断位
#define Bit_WUI 0x10 //唤醒中断位
#define Bit_EPI 0x20 //错误消极中断位
#define Bit_ALI 0x40 //仲裁丢失中断位
#define Bit_BEI 0x80 //总线错误中断位
#define REG_IER SJA_BaseAdr+0x04 //中断使能寄存器
#define Bit_RIE 0x01 //接收中断使能位
#define Bit_TIE 0x02 //发送中断使能位
#define Bit_EIE 0x04 //错误报警中断使能位
#define Bit_DOIE 0x08 //数据溢出中断使能位
#define Bit_WUIE 0x10 //唤醒中断使能位
#define Bit_EPIE 0x20 //错误消极中断使能位
#define Bit_ALIE 0x40 //仲裁丢失中断使能位
#define Bit_BEIE 0x80 //总线错误中断使能位
#define REG_BTR0 SJA_BaseAdr+0x06 //总线定时寄存器0(复位模式 写)
#define REG_BTR1 SJA_BaseAdr+0x07 //总线定时寄存器1(复位模式 写)
#define REG_OCR SJA_BaseAdr+0x08 //输出控制寄存器(复位模式 写)
//输出模式
#define Bit_BiPhaseMode 0x00 //双相输出模式
#define Bit_TestMode 0x01 //测试输出模式
#define Bit_NormalMode 0x02 //正常输出模式
#define Bit_ClkOutMode 0x03 //时钟输出模式
//TX1 的输出管脚配置
#define Bit_Bit_OCPOL1 0x20 //输出极性控制位
#define Bit_Tx1Float 0x00 //配置为悬空
#define Bit_Tx1PullDn 0x40 //配置为下拉
#define Bit_Tx1PullUp 0x80 //配置为上拉
#define Bit_Tx1PshPull 0Xc0 //配置为推挽
//TX0 的输出管脚配置
#define Bit_OCPOL0 0x04 //输出极性控制位
#define Bit_Tx0Float 0x00 //配置为悬空
#define Bit_Tx0PullDn 0x08 //配置为下拉
#define Bit_Tx0PullUp 0x10 //配置为上拉
#define Bit_Tx0PshPull 0X18 //配置为推挽
#define REG_TEST SJA_BaseAdr+0x09 //检测寄存器
#define REG_ALC SJA_BaseAdr+0x0b //仲裁丢失捕捉寄存器
#define REG_ECC SJA_BaseAdr+0x0c //错误代码捕捉寄存器
#define REG_EWLR SJA_BaseAdr+0x0d //错误报警限制寄存器
#define REG_RXERR SJA_BaseAdr+0x0e // RX 错误计数器
#define REG_TXERR SJA_BaseAdr+0x0f // TX 错误计数器
//***************************************************************************************************
//以下为验收代码/验收屏蔽寄存器定义(复位模式 访问)
#define REG_ACR0 SJA_BaseAdr+0x10 //验收代码寄存器0
#define REG_ACR1 SJA_BaseAdr+0x11 //验收代码寄存器1
#define REG_ACR2 SJA_BaseAdr+0x12 //验收代码寄存器2
#define REG_ACR3 SJA_BaseAdr+0x13 //验收代码寄存器3
#define REG_AMR0 SJA_BaseAdr+0x14 //验收屏蔽寄存器0
#define REG_AMR1 SJA_BaseAdr+0x15 //验收屏蔽寄存器1
#define REG_AMR2 SJA_BaseAdr+0x16 //验收屏蔽寄存器2
#define REG_AMR3 SJA_BaseAdr+0x17 //验收屏蔽寄存器3
//***************************************************************************************************
//以下为发送/接收缓冲区寄存器定义(工作模式 访问)
#define REG_Information SJA_BaseAdr+0x10 // 发送/接收缓冲器0(帧信息)
#define REG_Buffer1 SJA_BaseAdr+0x11 // 发送/接收缓冲器1
#define REG_Buffer2 SJA_BaseAdr+0x12 // 发送/接收缓冲器2
#define REG_Buffer3 SJA_BaseAdr+0x13 // 发送/接收缓冲器3
#define REG_Buffer4 SJA_BaseAdr+0x14 // 发送/接收缓冲器4
#define REG_Buffer5 SJA_BaseAdr+0x15 // 发送/接收缓冲器5
#define REG_Buffer6 SJA_BaseAdr+0x16 // 发送/接收缓冲器6
#define REG_Buffer7 SJA_BaseAdr+0x17 // 发送/接收缓冲器7
#define REG_Buffer8 SJA_BaseAdr+0x18 // 发送/接收缓冲器8
#define REG_Buffer9 SJA_BaseAdr+0x19 // 发送/接收缓冲器9
#define REG_Buffer10 SJA_BaseAdr+0x1a // 发送/接收缓冲器10
#define REG_Buffer11 SJA_BaseAdr+0x1b // 发送/接收缓冲器11
#define REG_Buffer12 SJA_BaseAdr+0x1c // 发送/接收缓冲器12
//***************************************************************************************************
//其它寄存器定义
#define REG_RMC SJA_BaseAdr+0x1d // RX 信息计数器
#define REG_RBSA SJA_BaseAdr+0x1e // RX 缓冲器起始地址寄存器
#define REG_CDR SJA_BaseAdr+0x1f //时钟分频寄存器
#define Bit_DivBy1 0x07 //CLKOUT = 振荡器频率
#define Bit_DivBy2 0x00 //CLKOUT = 1/2 振荡器频率
#define Bit_CLKOff 0x08 //时钟关闭位时钟输出管脚控制位
#define Bit_RXINTEN 0x20 //用于接收中断的管脚TX1
#define Bit_CBP 0x40 //CAN 比较器旁路控制位
#define Bit_CANMode 0x80 //CAN 模式控制位(PeliCAN 模式)
//***************************************************************************************************
//***************************************************************************************************
//**************************定义24M的晶体下,CAN总线波特率*******************************************
//***************************************************************************************************
#define ByteRate_20k 0x00 //波特率20kbps
#define ByteRate_50k 0x01 //波特率50kbps
#define ByteRate_100k 0x02 //波特率100kbps
#define ByteRate_800k 0x03 //波特率800kbps
//***************************************************************************************************
//***********************以下为PELICAN SJA1000的错误字***********************************************
//***************************************************************************************************
#define CAN_ENTRESET_ERR 0xf1 //SJA1000不能进入复位模式
#define CAN_QUITRESET_ERR 0xf2 //SJA1000不能退出复位模式
#define CAN_INIT_ERR 0xf3 //SJA1000 初始化错误 超过10次
#define CAN_COUNTERS_ERR 0xf4 //SJA1000错误计数器超限错
#define CAN_SENDOVERTIME_ERR 0xf5 //SJA1000 上次发送超时错误
#define CAN_OVERFLOW_ERR 0xf6 //SJA1000 RXFIFO 数据溢出错误
//#define CAN_INTERFACE_0K 0 //SJA1000接口正常
//#define CAN_BUS_0K 0 //CAN总线工作正常
//#define CAN_INTERFACE_ERR 0Xf1 //SJA1000接口错误
//#define CAN_INITOBJECT_ERR 0Xf4 //初始化报文验收滤波器错
//#define CAN_INITBTR_ERR 0Xf5 //初始化总线定时器错
//#define CAN_INITOUTCTL_ERR 0Xf6 //初始化输出控制错误
//#define CAN_INITIER_ERR 0Xf7 //初始化中断使能错误
//#define CAN_INTCLKDIV_ERR 0Xf8 //初始化时钟分频控制器错
//#define CAN_BUS_ERR 0Xf9 //SJA1000发送数据错
//#define CAN_ENTERSINGLE_ERR 0Xfb //设置单滤波器模式错误
//***************************************************************************************************
//**********************************函数声明*********************************************************
//***************************************************************************************************
void init_sja1000(void); //CAN控制器的初始化函数
INT8S can_data_send(void); //将待发送的数据,送入SJA1000发送缓存区, 并执行发送命令
INT8S can_data_receive(void); //CAN控制器接收数据
//CAN_BUFFER *CAN_BufferManage(INT8U CAN_BufferType); //CAN发送/接收缓冲区管理函数
//void sja1000_isr(void); //端口2 SJA1000中断 处理函数
//***************************************************************************************************
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -