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

📄 can20.h

📁 C8051F020控制的SJA1000can总线芯片的驱动程序
💻 H
字号:
#include<absacc.h>
//SJA1000 的寄存器和位定
//#define XBYTE ((unsigned char volatile xdata *) 0)
/*模式和控制寄存器的地址和位定义*/
#define ModeControlReg XBYTE[0x2000]
#define RM_RR_Bit 0x01 /*复位模式请求位*/
#define LOM_Bit 0x02 /*仅听模式位*/
#define STM_Bit 0x04 /*自我测试模式位*/
#define AFM_Bit 0x08 /*验收滤波器模式位*/
#define SM_Bit 0x10 /*进入休眠模式位*/
/*中断使能和控制寄存器的地址和位定义*/
#define InterruptEnReg XBYTE[0x2004] /* 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 /*总线错误中断使能位

/*命令寄存器的地址和位定义*/
#define CommandReg XBYTE[0x2001]
#define TR_Bit 0x01 /*发送请求位*/
#define AT_Bit 0x02 /*中止发送位*/
#define RRB_Bit 0x04 /*释放接收缓冲器位*/
#define CDO_Bit 0x08 /*清除数据超载位*/
#define SRR_Bit 0x10 /*自身接收请求位*/

#define StatusReg XBYTE[0x2002] 
#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[0x2003]
#define RI_Bit 0x01 /*接收中断位*/

#define TI_Bit 0x02 /*发送中断位*/
#define EI_Bit 0x04 /*错误警告中断位*/
#define DOI_Bit 0x08 /*数据超载中断位*/
#define WUI_Bit 0x10 /*唤醒中断位*/

#define EPI_Bit 0x20 /*错误被动中断位*/
#define ALI_Bit 0x40 /*仲裁丢失中断位*/
#define BEI_Bit 0x80 /*总线错误中断位*/

/*总线定时寄存器的地址和位定义*/
#define BusTiming0Reg XBYTE[0x2006]
#define BusTiming1Reg XBYTE[0x2007]
#define SAM_Bit 0x80 /*采样模式位
1 总线被采样三次
0 总线被采样一次*/
/*输出控制寄存器的地址和位定义*/
#define OutControlReg XBYTE[0x2008]
/*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 /*配置为推挽*/
/*验收代码和屏蔽寄存器的地址定义*/

#define AcceptCode0Reg XBYTE[0x2010]
#define AcceptCode1Reg XBYTE[0x2011]
#define AcceptCode2Reg XBYTE[0x2012]
#define AcceptCode3Reg XBYTE[0x2013]
#define AccepMask0Reg XBYTE[0x2014]
#define AccepMask1Reg XBYTE[0x2015]
#define AccepMask2Reg XBYTE[0x2016]
#define AccepMask3Reg XBYTE[0x2017]

/*Rx-缓冲器的地址定义*/

#define RxFramInFo XBYTE[0x2010]
#define RxBuffer1 XBYTE[0x2011]
#define RxBuffer2 XBYTE[0x2012]
#define RxBuffer3 XBYTE[0x2013]
#define RxBuffer4 XBYTE[0x2014]
#define RxBuffer5 XBYTE[0x2015]
#define RxBuffer6 XBYTE[0x2016]
#define RxBuffer7 XBYTE[0x2017]
#define RxBuffer8 XBYTE[0x2018]
#define RxBuffer9 XBYTE[0x2019]
#define RxBuffer10 XBYTE[0x201a]
#define RxBuffer11 XBYTE[0x201b]
#define RxBuffer12 XBYTE[0x201c]


#define TxFramInFo XBYTE[0x2010]
#define TxBuffer1 XBYTE[0x2011]
#define TxBuffer2 XBYTE[0x2012]
#define TxBuffer3 XBYTE[0x2013]
#define TxBuffer4 XBYTE[0x2014]
#define TxBuffer5 XBYTE[0x2015]
#define TxBuffer6 XBYTE[0x2016]
#define TxBuffer7 XBYTE[0x2017]
#define TxBuffer8 XBYTE[0x2018]
#define TxBuffer9 XBYTE[0x2019]
#define TxBuffer10 XBYTE[0x201a]
#define TxBuffer11 XBYTE[0x201b]
#define TxBuffer12 XBYTE[0x201c]

#define TxFramInFoRd XBYTE[96]
#define TxBufferRd1 XBYTE[97]
#define TxBufferRd2 XBYTE[98]
#define TxBufferRd3 XBYTE[99]
#define TxBufferRd4 XBYTE[100]
#define TxBufferRd5 XBYTE[101]
#define TxBufferRd6 XBYTE[102]
#define TxBufferRd7 XBYTE[103]
#define TxBufferRd8 XBYTE[104]
#define TxBufferRd9 XBYTE[105]
#define TxBufferRd10 XBYTE[106]
#define TxBufferRd11 XBYTE[107]
#define TxBufferRd12 XBYTE[108]


#define ArbLostCapReg XBYTE[0x200b]
#define ErrCodeCapReg XBYTE[0x200c]
#define ErrWarnLimitReg XBYTE[0x200d]

#define RxErrCountReg XBYTE[0x200e]
#define TxErrCountReg XBYTE[0x200f]
#define RxMsgCountReg XBYTE[0x201d]
#define RxBufstartAdr XBYTE[0x201e]


#define ClockDivideReg XBYTE[0x201f]
#define DivBy1 0x07 
#define DivBy2 0x00 
#define CLKOff_Bit 0x08 /*时钟关闭位时钟输出管脚控制位*/
#define RXINTEN_Bit 0x20 /*用于接收中断的管脚TX1 */
#define CBP_Bit 0x40 /*CAN 比较器旁路控制位*/
#define CANMode_Bit 0x80 /*CAN 模式控制位*/

#define PRIORITY_LOW 0
#define PRIORITY_HIGH 1
/*寄存器内容默认复位值清除寄存器*/
#define ClrByte 0x00
/*常量清除中断使能寄存器*/

#define ClrIntEnSJA ClrByte

#define DontCare 0xFF

#define PrescExample 0x02 /*波特率预分频3 */
#define SJWExample 0xc0 /*SJW 4 */
#define TSEG1Example 0x0A /*TSEG1 11 */
#define TSEG2Example 0x30 /*TSEG2 4 */

#define Prec_MB_24 0x00 /*波特率预分频器1 */
#define SJW_MB_24 0x00 /*SJW 1 */
#define TSEG1_MB_24 0x08 /*TSEG1 9 */
#define TSEG2_MB_24 0x10 /*TSEG2 2 */
#define SJW_kB_24 0xc0 /*SJW 4 */
#define TSEG1_kB_24 0x09 /*TSEG1 10 */
#define TSEG2_kB_24 0x30 /*TSEG2 4 */
#define SJW_MB_16 0x00 /*SJW 1 */
#define TSEG1_MB_16 0x08 /*TSEG1 5 */
#define TSEG2_MB_16 0x10 /*TSEG2 2 */

#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 */

//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

⌨️ 快捷键说明

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