📄 sja1000_def.h
字号:
/*********************************************************************
THE CAN BUS CONTROLER SJA1000+MC82C250 DRIVER LIB
COPYRIGHT (c) 2008 BY LRL
-- ALL RIGHTS RESERVED --
File Name: SJA1000.h
Author: Liu Ri Lei
Created: 2008/4/29
Modified: NO
Revision: 1.0
***********************************************************************/
#ifndef __SJA1000_Def_H__
#define __SJA1000_Def_H__
//SJA1000 模式定义
#ifndef PeliCANMode
#define PeliCANMode
//SJA1000 的寄存器和位定义
/*定义直接对STC89C52RC的存储区访问 */
unsigned char xdata CAN_SJA_BaseAdr _at_ 0x0100;//定义SJA1000的片选基址
/****模式和控制寄存器的地址和位定义****/
#if defined (PeliCANMode)
#define ModeControlReg XBYTE[CAN_SJA_BaseAdr+0]
#define RM_RR_Bit 0x01 //复位模式请求位
#define LOM_Bit 0x02 //仅听模式位
#define STM_Bit 0x04 //自我测试模式位
#define AFM_Bit 0x08 //验收滤波器模式位 =1单滤波 =0双滤波
#define SM_Bit 0x10 //进入休眠模式位 复位置1
#endif
/****中断使能和控制寄存器的地址和位定****/
#if defined (PeliCANMode)
#define InterruptEnReg XBYTE[CAN_SJA_BaseAdr+4] // PeliCAN 模式
#define RIE_Bit 0x01 //接收中断使能位
#define TIE_Bit 0x02 //发送中断使能位
#define EIE_Bit 0x04 //错误警告中断使能位
#define DOIE_Bit 0x08 //数据超载中断使能位
#define WUIE_Bit 0x10 //唤醒中断使能位
#define EPIE_Bit 0x20 //错误隐性中断使能位
#define ALIE_Bit 0x40 //仲裁丢失中断使能位
#define BEIE_Bit 0x80 //总线错误中断使能位
#else
#define InterruptEnReg XBYTE[CAN_SJA_BaseAdr+0] //BasicCAN 模式
#define RM_RR_Bit 0x01 //复位模式请求位
#define RIE_Bit 0x02 //接收中断使能位
#define TIE_Bit 0x04 //发送中断使能位
#define EIE_Bit 0x08 //错误中断使能位
#define DOIE_Bit 0x10 //超载中断使能位
#endif
//命令寄存器的地址和位定义
#define CommandReg XBYTE[CAN_SJA_BaseAdr+1]
#define TR_Bit 0x01 //发送请求位
#define AT_Bit 0x02 //中止发送位
#define RRB_Bit 0x04 //释放接收缓冲器位
#define CDO_Bit 0x08 //清除数据超载位
#if defined (PeliCANMode)
#define SRR_Bit 0x10 //自身接收请求位
#else //-----BasicCAN 模式
#define GTS_Bit 0x10 //进入睡眠模式位
#endif
/****状态寄存器的地址和位定义****/
#define StatusReg XBYTE[CAN_SJA_BaseAdr+2]
#define RBS_Bit 0x01 //接收缓冲器状态位
#define DOS_Bit 0x02 //数据超载状态位
#define TBS_Bit 0x04 //发送缓冲器状态位
#define TCS_Bit 0x08 //发送完成状态位
#define RS_Bit 0x10 //接收状态位
#define TS_Bit 0x20 //发送状态位
#define ES_Bit 0x40 //错误状态位
#define BS_Bit 0x80 //总线状态位
/****中断寄存器的地址和位定义****/
#define InterruptReg XBYTE[CAN_SJA_BaseAdr+3]
#define RI_Bit 0x01 //接收中断位
#define TI_Bit 0x02 //发送中断位
#define EI_Bit 0x04 //错误警告中断位
#define DOI_Bit 0x08 //数据超载中断位
#define WUI_Bit 0x10 //唤醒中断位
#if defined (PeliCANMode)
#define EPI_Bit 0x20 //错误被动中断位
#define ALI_Bit 0x40 //仲裁丢失中断位
#define BEI_Bit 0x80 //总线错误中断位
#endif
/****总线定时寄存器的地址和位定义****/
#define BusTiming0Reg XBYTE[CAN_SJA_BaseAdr+6]
#define BusTiming1Reg XBYTE[7]
#define SAM_Bit 0x80 //采样模式位
//1表示总线被采样三次 A级/B级中低速模式
//0表示总线被采样一次 高速模式
/****输出控制寄存器的地址和位定义****/
#define OutControlReg XBYTE[CAN_SJA_BaseAdr+8]//OCMODE1 OCMODE0
#define BiPhaseMode 0x00 //双相输出模式
#define NormalMode 0x02 //正常输出模式
#define ClkOutMode 0x03 //时钟输出模式
/* TX1 的输出管脚配置 */
#define OCPOL1_Bit 0x20 //输出极性控制位
#define Tx1Float 0x00 //配置为悬空
#define Tx1PullDn 0x40 //配置为下拉
#define Tx1PullUp 0x80 //配置为上拉
#define Tx1PshPull 0Xc0 //配置为推挽
/* TX0 的输出管脚配置 */
#define OCPOL0_Bit 0x04 //输出极性控制位
#define Tx0Float 0x00 //配置为悬空
#define Tx0PullDn 0x08 //配置为下拉
#define Tx0PullUp 0x10 //配置为上拉
#define Tx0PshPull 0X18 //配置为推挽
/****验收代码和屏蔽寄存器的地址定义****/
#if defined (PeliCANMode)
#define AcceptCode0Reg XBYTE[CAN_SJA_BaseAdr+16] //验收代码0
#define AcceptCode1Reg XBYTE[CAN_SJA_BaseAdr+17] //验收代码1
#define AcceptCode2Reg XBYTE[CAN_SJA_BaseAdr+18] //验收代码2
#define AcceptCode3Reg XBYTE[CAN_SJA_BaseAdr+19] //验收代码3
#define AccepMask0Reg XBYTE[CAN_SJA_BaseAdr+20] //验收屏蔽寄存器0
#define AccepMask1Reg XBYTE[CAN_SJA_BaseAdr+21] //验收屏蔽寄存器1
#define AccepMask2Reg XBYTE[CAN_SJA_BaseAdr+22] //验收屏蔽寄存器2
#define AccepMask3Reg XBYTE[CAN_SJA_BaseAdr+23] //验收屏蔽寄存器3
#else //BasicCAN 模式
#define AcceptCodeReg XBYTE[CAN_SJA_BaseAdr+4] //验收代码
#define AcceptMaskReg XBYTE[CAN_SJA_BaseAdr+5] //验收屏蔽寄存器 X X X RTR DLC(3.2.1.0)
#endif
//验收代码和屏蔽寄存器的定义
#define DontCare 0xFF
/* Rx-缓冲器的地址定义 */
#if defined (PeliCANMode)
#define RxFramInFo XBYTE[CAN_SJA_BaseAdr+16]
#define RxBuffer1 XBYTE[CAN_SJA_BaseAdr+17]
#define RxBuffer2 XBYTE[CAN_SJA_BaseAdr+18]
#define RxBuffer3 XBYTE[CAN_SJA_BaseAdr+19]
#define RxBuffer4 XBYTE[CAN_SJA_BaseAdr+20]
#define RxBuffer5 XBYTE[CAN_SJA_BaseAdr+21]
#define RxBuffer6 XBYTE[CAN_SJA_BaseAdr+22]
#define RxBuffer7 XBYTE[CAN_SJA_BaseAdr+23]
#define RxBuffer8 XBYTE[CAN_SJA_BaseAdr+24]
#define RxBuffer9 XBYTE[CAN_SJA_BaseAdr+25]
#define RxBuffer10 XBYTE[CAN_SJA_BaseAdr+26]
#define RxBuffer11 XBYTE[CAN_SJA_BaseAdr+27]
#define RxBuffer12 XBYTE[CAN_SJA_BaseAdr+28]
#else //BasicCAN 模式
#define RxBuffer1 XBYTE[CAN_SJA_BaseAdr+20]
#define RxBuffer2 XBYTE[CAN_SJA_BaseAdr+21]
#define RxBuffer3 XBYTE[CAN_SJA_BaseAdr+22]
#define RxBuffer4 XBYTE[CAN_SJA_BaseAdr+23]
#define RxBuffer5 XBYTE[CAN_SJA_BaseAdr+24]
#define RxBuffer6 XBYTE[CAN_SJA_BaseAdr+25]
#define RxBuffer7 XBYTE[CAN_SJA_BaseAdr+26]
#define RxBuffer8 XBYTE[CAN_SJA_BaseAdr+27]
#define RxBuffer9 XBYTE[CAN_SJA_BaseAdr+28]
#define RxBuffer10 XBYTE[CAN_SJA_BaseAdr+29]
#endif
/* Tx 缓冲器的地址定义 */
#if defined (PeliCANMode)
//仅写地址
#define TxFramInFo XBYTE[CAN_SJA_BaseAdr+16]
#define TxBuffer1 XBYTE[CAN_SJA_BaseAdr+17]
#define TxBuffer2 XBYTE[CAN_SJA_BaseAdr+18]
#define TxBuffer3 XBYTE[CAN_SJA_BaseAdr+19]
#define TxBuffer4 XBYTE[CAN_SJA_BaseAdr+20]
#define TxBuffer5 XBYTE[CAN_SJA_BaseAdr+21]
#define TxBuffer6 XBYTE[CAN_SJA_BaseAdr+22]
#define TxBuffer7 XBYTE[CAN_SJA_BaseAdr+23]
#define TxBuffer8 XBYTE[CAN_SJA_BaseAdr+24]
#define TxBuffer9 XBYTE[CAN_SJA_BaseAdr+25]
#define TxBuffer10 XBYTE[CAN_SJA_BaseAdr+26]
#define TxBuffer11 XBYTE[CAN_SJA_BaseAdr+27]
#define TxBuffer12 XBYTE[CAN_SJA_BaseAdr+28]
//仅读地址
#define TxFramInFoRd XBYTE[CAN_SJA_BaseAdr+96]
#define TxBufferRd1 XBYTE[CAN_SJA_BaseAdr+97]
#define TxBufferRd2 XBYTE[CAN_SJA_BaseAdr+98]
#define TxBufferRd3 XBYTE[CAN_SJA_BaseAdr+99]
#define TxBufferRd4 XBYTE[CAN_SJA_BaseAdr+100]
#define TxBufferRd5 XBYTE[CAN_SJA_BaseAdr+101]
#define TxBufferRd6 XBYTE[CAN_SJA_BaseAdr+102]
#define TxBufferRd7 XBYTE[CAN_SJA_BaseAdr+103]
#define TxBufferRd8 XBYTE[CAN_SJA_BaseAdr+104]
#define TxBufferRd9 XBYTE[CAN_SJA_BaseAdr+105]
#define TxBufferRd10 XBYTE[CAN_SJA_BaseAdr+106]
#define TxBufferRd11 XBYTE[CAN_SJA_BaseAdr+107]
#define TxBufferRd12 XBYTE[CAN_SJA_BaseAdr+108]
#else //BasicCAN 模式
#define TxBuffer1 XBYTE[CAN_SJA_BaseAdr+10]
#define TxBuffer2 XBYTE[CAN_SJA_BaseAdr+11]
#define TxBuffer3 XBYTE[CAN_SJA_BaseAdr+12]
#define TxBuffer4 XBYTE[CAN_SJA_BaseAdr+13]
#define TxBuffer5 XBYTE[CAN_SJA_BaseAdr+14]
#define TxBuffer6 XBYTE[CAN_SJA_BaseAdr+15]
#define TxBuffer7 XBYTE[CAN_SJA_BaseAdr+16]
#define TxBuffer8 XBYTE[CAN_SJA_BaseAdr+17]
#define TxBuffer9 XBYTE[CAN_SJA_BaseAdr+18]
#define TxBuffer10 XBYTE[CAN_SJA_BaseAdr+19]
#endif
/*其他寄存器的地址定义*/
#if defined (PeliCANMode)
#define ArbLostCapReg XBYTE[CAN_SJA_BaseAdr+11] //仲裁丢失捕捉
#define ErrCodeCapReg XBYTE[CAN_SJA_BaseAdr+12] //错误代码捕捉
#define ErrWarnLimitReg XBYTE[CAN_SJA_BaseAdr+13] //错误报警限制
#define RxErrCountReg XBYTE[CAN_SJA_BaseAdr+14] //Rx错误计数器
#define TxErrCountReg XBYTE[CAN_SJA_BaseAdr+15] //Tx错误计数器
#define RxMsgCountReg XBYTE[CAN_SJA_BaseAdr+29] //Rx信息计数器
#define RxBufstartAdr XBYTE[CAN_SJA_BaseAdr+30] //Rx缓冲区其始地址
#endif
/*时钟分频寄存器的地址和位定义 */
#define ClockDivideReg XBYTE[CAN_SJA_BaseAdr+31]
#define DivBy1 0x07 //CLKOUT=振荡器频率
#define DivBy2 0x00 //CLKOUT=1/2 振荡器频率
#define CLKOff_Bit 0x08 //时钟关闭位时钟输出管脚控制位
#define RXINTEN_Bit 0x20 //用于接收中断的管脚TX1
#define CBP_Bit 0x40 //CAN 比较器旁路控制位
#define CANMode_Bit 0x80 //CAN 模式控制位
//使用的常量定义
#define NO 0
#define YES 1
#define ENABLE 1
#define DISABLE 0
#define ENABLE_N 0
#define DISABLE_N 1
#define INTEDGEACT 1
#define INTLEVELACT 0
#define PRIORITY_LOW 0
#define PRIORITY_HIGH 1
//寄存器内容默认复位值清除寄存器
#define ClrByte 0x00
//常量清除中断使能寄存器
#if defined (PeliCANMode)
#define ClrIntEnSJA ClrByte
#else
#define ClrIntEnSJA ClrByte RM_RR_Bit //保留复位请求
#endif
//-----------------------------------------------------
//总线定时值
//位率 1MBit/s
//振荡器频率 16MHz 1,0%
//最大允许传播延迟 623ns
//最小要求传播延迟 23n
#define Prec_MB_16 0x00 //波特率预分频器 1
#define SJW_MB_16 0x00 //SJW 1
#define TSEG1_MB_16 0x08 //TSEG1 5
#define TSEG2_MB_16 0x10 //TSEG2 2
//总线定时值
//位率 100kBit/s
//振荡器频率 16MHz 1,0%
//最大允许传播延迟 4450ns
//最小要求传播延迟 500ns
#define Prec_kB_16 0x04 //波特率预分频器 5
#define SJW_kB_16 0xC0 //SJW 4
#define TSEG1_kB_16 0x0A //TSEG1 11
#define TSEG2_kB_16 0x30 //TSEG2 4
//总线定时值的结束
//使用过的变量的定义
//中断寄存器内容的中间存储内容
unsigned char bdata CANInterrupt ;//可位寻址的字节
sbit RI_BitVar = CANInterrupt^0;//接收中断
sbit TI_BitVar = CANInterrupt^1;//发送中断
sbit EI_BitVar = CANInterrupt^2;//错误报警中断
sbit DOI_BitVar = CANInterrupt^3;//数据溢出中断
sbit WUI_BitVar = CANInterrupt^4;//唤醒中断
sbit EPI_BitVar = CANInterrupt^5;//错误消极中断
sbit ALI_BitVar = CANInterrupt^6;//仲裁丢失中断
sbit BEI_BitVar = CANInterrupt^7;//总线错误中断
//-----------------------------------------------------
//以上为头文件定义部分
//-----------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -