📄 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 + -