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

📄 sja1000_def.h

📁 直接可用的基于sja1000+51的C源代码
💻 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 + -