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

📄 can.h

📁 ARM9200的can驱动原程序
💻 H
字号:
/*****************************************************************************
;Institue of Automation, Chinese Academy of Sciences
;Beijing Hengyi Embedded System Co.,Ltd (www.hyesco.com)
;File Name:		
;Description:   header file for can sja1000
;Date:			2006-03-15		
;Author:		Wujh origin from jzm
;E_mail:		wujh@hyesco.com
*****************************************************************************/
#ifndef __CAN_H__
#define __CAN_H__

//cs
#define CAN_DATA_CS 0x70000000 //数据锁存
#define CAN_ADDR_CS 0x70000010 //地址锁存

#define  SJA_INT_ID        AT91C_ID_PIOB
#define  SJA_INT_PIOA      (0x1<<0)          //PA0

//寄存器地址
#define CAN_REG_MOD	0	//内部模式寄存器地址
#define CAN_REG_CMR	1	//控制寄存器
#define CAN_REG_SR 	2	//状态寄存器
#define CAN_REG_IR 	3	//中断状态寄存器
#define CAN_REG_IER	4	//中断使能寄存器
#define CAN_REG_BTR0 	6 	//总线定时寄存器0、1的设
#define CAN_REG_BTR1 	7
#define CAN_REG_OCR 	8 	//输出控制寄存器
#define CAN_REG_TEST	9	//测试寄存器

#define CAN_REG_ALC	11	//仲裁丢失捕足
#define CAN_REG_ECC	12	//错误代码捕足
#define CAN_REG_EWLR	13	//错误报警限制寄存器

#define CAN_REG_RXERR	14	//接受错误计数器
#define CAN_REG_TXERR	15	//发送错误计数器

#define CAN_REG_ACR0 	16	//验收玛
#define CAN_REG_ACR1 	17
#define CAN_REG_ACR2 	18
#define CAN_REG_ACR3 	19

#define CAN_REG_AMR0 	20	//屏蔽码
#define CAN_REG_AMR1 	21
#define CAN_REG_AMR2 	22
#define CAN_REG_AMR3 	23

#define CAN_REG_RMC 	29
#define CAN_REG_RBSA 	30	//FIFO淇实地质
#define CAN_REG_CDR 	31		//时钟寄存器

#define CAN_REG_START_FIFO	32	//内部fifo起始地址


#define CAN_REG_TX_SFF 	16	//桢信息
#define CAN_REG_TX_ID0 	17	//桢信息
#define CAN_REG_TX_ID1 	18	//桢信息
#define CAN_REG_TX_ID2 	19	//桢信息
#define CAN_REG_TX_ID3 	20	//桢信息


#define CAN_REG_RX_SFF 	16	//桢信息
#define CAN_REG_RX_ID0 	17	//桢信息
#define CAN_REG_RX_ID1 	18	//桢信息
#define CAN_REG_RX_ID2 	19	//桢信息
#define CAN_REG_RX_ID3 	20	//桢信息


#define CAN_REG_TX_SFF_BUFFER 19 //SFF格式BUFFER
#define CAN_REG_TX_EFF_BUFFER 21//EFF格式桢BUFFER

#define CAN_REG_RX_SFF_BUFFER 19 //SFF格式BUFFER
#define CAN_REG_RX_EFF_BUFFER 21//EFF格式桢BUFFER


#define CAN_SFF
#define CAN_ID1			//标识符
#define CAN_ID2


//错误信息
#define ERROR_NO_CAN	1		//没有检测到can接口芯片
#define ERROR_RESET 	2		//复位错误
#define ERROR_BTR	3	//波特率设置错误
#define ERROR_OCR	4	//输出控制其设置错误
#define ERROR_CDR	5	//时钟分频器设置错误
#define ERROR_RXERR	6	//
#define ERROR_ACR	7
#define ERROR_AMR	8
#define ERROR_IER	9
#define ERROR_RBSA	10
#define ERROR_TXERR	11
#define ERROR_MOD  12	//没有正确返回工作模式

#define ERROR_TX_SFF	13	//写包头错误
#define ERROR_TX_ID	14	//写包头错误
#define ERROR_TX_BUFFER	15//填写发送数据缓存错误


//状态寄存器
#define STATUS_TBS	30	//发送缓存器锁定
#define STATUS_TCS 	31	//数据还没有被发送完
#define STATUS_RS 	32	//正在接收数据
#define STATUS_TS 	33	//发送缓存器锁定
#define STATUS_ES 	34	//出错
#define STATUS_BS 	35	//总线关闭
#define STATUS_DOS 	36	//数据溢出
#define STATUS_RBS 	35	//FIFO中有可用信息等待读出



//重复写读写操作次数
#define REPEART_TIMES 5

//扩展桢
#define    SEND_EFF_DATA    1

//参数设置
#define PARAM_OCR	0xda		//输出控制寄存器,正常输出模式
#define PARAM_CDR	0xc8		//摄制成pelican模式,cbp=1,rxd1接地,关闭时钟愉出

#define PARAM_ACR0	0x00	//0x00
#define PARAM_ACR1	0x00		//
#define PARAM_ACR2	0x00
#define PARAM_ACR3	0x00
	

#define PARAM_AMR0	0xff
#define PARAM_AMR1	0xff
#define PARAM_AMR2	0xff
#define PARAM_AMR3	0xff

#define PARAM_IER	0x01	//打开接受中断

#define PARAM_ENTER_MOD 0x01
#define PARAM_RET_MOD	0x08	//进入单滤波模式,返回工作模式

#define PARAM_RBSA	0x00	//fifo首地址,从can的32开始

#define PARAM_TX_ID0	0x10  //数据ID
#define PARAM_TX_ID1	0xe1
#define PARAM_TX_ID2	0x10	//EFF格式
#define PARAM_TX_ID3	0xe1


#define PARAM_TX_FF_SFF 	0x00	//sff格式
#define PARAM_TX_FF_EFF	0x80    //eff

#define PARAM_TX_RTR_DATA 0x00  //数据
#define PARAM_TX_PTR_RF		0x40 //远程桢

#define PARAM_DATA_LENGTH 0x08



//地址,数据读写宏
//写CAN 寄存器
//读写命令
#define WRITE_CAN_DATA(data)  (*(volatile unsigned char *)(CAN_DATA_CS))=data
#define WRITE_CAN_ADDR(addr)  (*(volatile unsigned char *)(CAN_ADDR_CS))=addr 
#define READ_CAN_REG() (*(volatile unsigned char *)(CAN_DATA_CS))



//函数定义声明
void Init_CAN_Board(void);//初始化cpu总线

unsigned char Init_CAN(void);//初始化can

void Write_CAN_REG(unsigned char can_reg_addr, unsigned char data);//写CAN 寄存器

unsigned char Read_CAN_REG(unsigned char can_reg_addr);//读CAN寄存器

int CAN_TRANSMIT(void);//发送数据操作函数

void Eint2CanInt(void);//中断分发函数

void CanIntReceiveData(void);////响应中断接受数据

void CanReceiveData(void);  //数据接受函数

void CanSendData(void);     //发送接受函数

#endif

⌨️ 快捷键说明

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