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

📄 sja1000.h

📁 测试CAN接口(sja1000) ,每接收到一帧数据,就 原样 回发 一帧!!!! (拨码开关全 拨到 ON ,上位机 发送帧 ID为 0)
💻 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 + -